在构造函数声明中使用类本地类型定义

时间:2018-12-14 07:05:10

标签: c++11 templates using-directives

我试图在构造函数声明中使用类局部类型定义。这两个类都是模板,这是代码。

template < typename T>
class complexType
{
    public:
    using value_type = T;
    complexType( T t ) {}
};


template <typename containedType >
class container
{
    public:
    container ( containedType::value_type v ) { return; }
    //container ( int v ) { return; }
};

int main(int ac, char **av)
{
    container <complexType<int>> c(100);
    return 0;
}

如果我使用第二个构造函数定义,该定义将传递给int,则代码可以正常运行。我无法解释为什么代码无法构建。

1 个答案:

答案 0 :(得分:1)

value_type是从属名称,它取决于模板参数,在这种情况下,您需要使用typename来指示value_type type

template <typename containedType >
class container
{
    public:
    container ( typename containedType::value_type v ) { return; }
                ^^^^^^^ 
    //container ( int v ) { return; }
};