используя определение локального типа класса в объявлении конструктора - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь использовать определение локального типа класса в объявлении конструктора.оба класса являются шаблонами, вот код.

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 голосов
/ 14 декабря 2018

value_type является зависимым именем, которое зависит от аргумента шаблона, в таком случае вам нужно использовать typename, чтобы указать, что value_type - это тип :

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