好的,我有:
template<typename T>
class Reader
{
class Input
{
template<typename C>
void operator()(C& val) const
{
/* Do Some Work */
}
};
};
不幸的是,“做一些工作”的通用版本对我不起作用。也不容易修改,因为它处于一些沉重的模板元编程代码的中间。
所以我虽然可以为我的类型专门化这个方法。所以我的第一步是尝试将一般方法拉出课堂。
template<typename T>
class Reader
{
class Input
{
template<typename C>
void operator()(C& val) const;
};
};
template<typename T>
template<typename C>
void typename Reader<T>::Input template operator()<C>(C& val) const // LINE 13
{
/* Do Some Work */
}
不幸的是我收到错误:
s.h:13:错误:错误:预期')'在'&amp;'标记
之前
答案 0 :(得分:4)
就像普通的
一样写template<typename T>
template<typename C>
void Reader<T>::Input::operator()(C& val) const // LINE 13
{
/* Do Some Work */
}
在课堂上定义通用版本并没有帮助你提供它的特殊版本,或者我确实错过了你的目标。
答案 1 :(得分:0)
我想这是不可能的,因为它算作部分功能模板专业化,这是不允许的。 void Reader<T>::Input::operator () (C& int)
具有类型为this
的隐式第一个参数(Reader<T>::Input *
指针),因此其签名实际上是void (Reader<T>::Input *, C &)
。您正在尝试指定C
,而不是T
。