嵌套类型作为函数参数

时间:2010-06-23 01:33:55

标签: c++

我有以下模板类:


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)
{
    //...
}

是不允许的。有没有?

2 个答案:

答案 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) {}