Учитывая следующий шаблон:
template<class T>
class Container
{
private:
boost::function<T> f;
};
... и его создание, возможно, следующим образом:
Container<bool(int, int)> myContainer;
, есть ли способ получить доступ к типу возврата функцииописание и составить условно против этого?Например, если вызывающая сторона указывает, что его функция возвращает bool (как в приведенном выше случае), я хочу включить функцию, которая возвращает значение.Если он указывает, что функция void, я не хочу, чтобы эта функция была включена.Например:
// Include if the return type of T is void
template<class T1, class T2>
void DoSomething(T1 t1, T2 t2)
{
f(t1, t2);
}
// Include if the return type of T is not void
template<class T1, class T2>
***whatever the return type is*** DoSomething(T1 t1, T2 t2)
{
return f(t1, t2);
}
Я предполагаю, что здесь есть решение, но оно, вероятно, включает какое-то ужасно запутанное решение для метапрограммирования шаблонов.Я знаю, что Грегор Кантор сошел с ума, созерцая бесконечность ... шаблонное метапрограммирование оказывает на меня такое же влияние: стр.
Спасибо за любые мысли, которые у вас могут возникнуть.
RobinsonT
Редактировать: Очевидно, что это можно решить путем реализации другого класса (возможно, полученного из общей базы), один с именем VoidContainer, а другой с именем ReturnsContainer (или аналогичный).Однако мне это кажется немного неудовлетворительным ...