Вопрос почти не имеет смысла без примера. Итак, вот что я пытаюсь сделать.
В целом С++ позволяет следующее:
template<class T, class U, T t, U u>
void func() {}
func<char, int, 'A', 10>();
Но похоже, что его естественное вариативное расширение не работает.
template<class...T, T... t>
void func() {}
func<char, int, 'A', 10>();
И clang, и g++4.7 отвергают приведенный выше код. Ошибка отображается там, где выполняется создание экземпляра. Мне кажется, что два вариативных списка должны анализироваться однозначно, потому что первый имеет типы, а другой имеет только целые значения.
Если вышеизложенное не предназначено для работы, я думаю, что следующее тоже не сработает.
template <class Ret, class... Args, Ret (*func)(Args...)>
class Foo {};
Я думаю, что шаблон Foo — довольно полезная штука.
Foo
был бы похож наtemplate<typename T, T>
, последний параметр шаблона на самом деле вообще ничего не добавляет и, следовательно, совершенно не нужен, в конце концов, тип может быть прекрасно выражен с использованием параметров шаблона (например,typedef Ret(*func)(Args...)
внутриFoo
) - person Grizzly   schedule 12.01.2012