作者:Kevinczp | 来源:互联网 | 2023-01-26 17:12
1> Sam Varshavc..:
当涉及可变参数模板时,C++有两个方面,在您的情况下彼此冲突:
默认模板参数不应位于非默认模板参数之前.
变量模板参数不应位于非可变参数模板参数之前.
在许多情况下,当然可以正确声明和使用参数不遵循这些规则的模板,但这些情况对于此问题的目的并不重要.在您的情况下,它归结为两个模板参数都希望成为其模板中的最后一个参数,这是出于各自的原因.简而言之,这就是问题所在.
解决此冲突的最简单方法是使用内部模板:
template
class CallbackClass {
public:
template class Callback
{
}
};
然后,你的两个例子变成:
CallbackClass<>::Callback
和
CallbackClass::Callback
当然,你最终会有更长的课程名称.但是,这是什么typedef
和using
是.例如:
template
using DefaultCallback=CallbackClass<>::Callback;
然后用
DefaultCallback