Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可变模板成员函数的部分特殊化_C++_Templates_C++11_Variadic Templates - Fatal编程技术网

C++ 可变模板成员函数的部分特殊化

C++ 可变模板成员函数的部分特殊化,c++,templates,c++11,variadic-templates,C++,Templates,C++11,Variadic Templates,当使用可变模板对成员函数进行模板化时,我正在努力实现成员函数的专门化 以下示例专门化了整个类,效果良好: template<typename... Args> class C; template<class T, typename... Args> class C<T, Args...> { }; template<> class C<> { }; int main() { C<int, double> c{}

当使用可变模板对成员函数进行模板化时,我正在努力实现成员函数的专门化

以下示例专门化了整个类,效果良好:

template<typename... Args>
class C;

template<class T, typename... Args>
class C<T, Args...> { };

template<>
class C<> { };

int main() {
    C<int, double> c{};
}
模板
丙级;;
模板
C类{};
模板
C类{};
int main(){
C{};
}
下面的一个没有,尽管它背后的想法与上面的想法完全相同:

class F {
    template<typename... Args>
    void f();
};

template<class T, typename... Args>
void F::f<T, Args...>() { }

int main() {
}
F类{
模板
无效f();
};
模板
void F::F(){}
int main(){
}
我得到以下错误,我不明白是什么原因造成的:

main.cpp:7:23: error: non-type partial specialization ‘f<T, Args ...>’ is not allowed
 void F::f<T, Args...>() { }
                       ^
main.cpp:7:6: error: prototype for ‘void F::f()’ does not match any in class ‘F’
 void F::f<T, Args...>() { }
      ^
main.cpp:3:10: error: candidate is: template<class ... Args> void F::f()
     void f();
          ^
main.cpp:7:23:错误:不允许非类型部分专门化“f”
void F::F(){}
^
main.cpp:7:6:错误:“void F::F()”的原型与类“F”中的任何原型都不匹配
void F::F(){}
^
main.cpp:3:10:错误:候选项是:模板void F::F()
无效f();
^
在专门化函数模板时,是否存在一些我不知道的约束

G++版本为:G++(Debian 5.2.1-23)5.2.1 20151028

编辑

顺便说一下,我从实际代码中得到的实际问题是:

non-class, non-variable partial specialization ‘executeCommand<T, Args ...>’ is not allowed
不允许非类、非变量的部分专门化“executeCommand”

无论如何,简化后的示例与真实示例相似。我希望这些错误并非完全无关。

您不能部分专门化函数模板;只允许显式专门化


使用重载可以获得几乎相同的效果,特别是如果使用。

函数模板不能部分专用化。你是说成员函数模板吗?@skypjack:member而不是member。该死。对不起,我完全忘记了。这个错误确实很清楚,但是当你理解它的时候,它已经足够清楚了。谢谢。:-)关于为什么不专门化函数模板的一个很好的解释:很好的提示。我已经用过标签发送,但今天我没想到!!谢谢。链接坏了,你能修好吗?@tuket-link修好了