我有以下模板类:
template<class T>
class C
{
typedef C_traits<T> traits;
typedef typename traits::some_type type;
//...
// use 'traits' and 'type' a lot
//...
};
其中C_traits
是一个模板结构,其some_type
的typedef对于类型X
的每个特化都不同。我正在尝试编写一个函数来接收对如上定义的type
变量的引用,即:
template<class T>
//void f(const C_traits<T>::some_type& c) <-- this does not work either
void f(const C<T>::type& c)
{
//...
}
我正在获得“预期不合格的身份”之前'&amp;'令牌“在定义f的行上的错误。我想我理解为什么我会收到这个错误,但我想知道是否有办法完成我在这里要做的事情。
换句话说,我想做这样的事情:
template<class T>
void f(typename const C<T>::type& c)
{
//...
}
是不允许的。有没有?
答案 0 :(得分:1)
template <typename T>
void f(const typename C<T>::type& c) { }
这是允许的,但是限定类型是非推断的上下文之一。也就是说,模板参数推导不适用于此,因此您必须像这样调用函数:
f(42); // won't work
f<int>(42); // works
如果您不想明确提供类型参数,一个选项是让函数只需T
:
template <typename T> void f(const typename T& c) { }
答案 1 :(得分:0)
我使用了相同的错误:
template <typename T>
void f(typename const C<T>::type& c) {}
但使用
没有出错template <typename T>
void f(const typename C<T>::type& c) {}