The*_*ain 1 c++ templates zero c++11
我有一个类似于以下定义的类:
template< typename A, typename... B >
struct S {
//...//
};
Run Code Online (Sandbox Code Playgroud)
但我想像这样创建一个重载(有效):
template<>
struct S<> {
//...//
};
Run Code Online (Sandbox Code Playgroud)
然而,上面显然是非法的,我不能使用varidic模板,并传递零参数,因为这可能与第一个定义(和不好的做法)不明确.有没有办法在C++中创建零参数的模板说明符?
问题是您正在尝试创建与主模板不匹配的部分特化(主模板至少需要一个参数).如果要使用可变参数模板,则可以执行以下操作:
template <typename... A>
struct S {
// One-or-more case
};
template <>
struct S<> {
// Zero case
};
Run Code Online (Sandbox Code Playgroud)
根据评论,海报想找到非空案件的第一个论点; 对此的修改是:
template <typename... A>
struct S;
template <>
struct S<> {
// Zero case
};
template <typename A, typename... B>
struct S<A, B...> {
// One-or-more case
};
Run Code Online (Sandbox Code Playgroud)