给出通用函数foo:
template<typename T> void foo(T a) { a(); }
我想将此功能专门用于Bar类型,但是Bar本身具有多个模板参数。 我试图按如下方式专门化foo():
template<typename... Args> void foo<Bar<Args...> >(Bar<Args...> a) { a(42); }
但是,这不太有效。有人可以帮我吗?谢谢
答案 0 :(得分:1)
没有诸如功能模板的部分专业化之类的东西。一种解决方法是委托一个类模板,该模板实际上可以是部分专用的。遵循以下原则:
template <typename T>
struct FooImpl {
static void foo(T a) { /* general implementation */ }
};
template<typename... Args>
struct FooImpl<Bar<Args...>> {
static void foo(Bar<Args...> a) { /* special implementation */ }
};
template<typename T>
void foo(T a) { FooImpl<T>::foo(a); }