Шаблонная функция C ++, принимающая класс шаблона в качестве параметра - PullRequest
7 голосов
/ 23 марта 2012

Я борюсь со следующим кодом. По сути, у меня есть класс Foo и вложенный класс Bar, и теперь я хочу передать указатель объекта класса Bar на функцию, но он не компилируется. Может ли кто-нибудь помочь мне с этим? Спасибо.

template <typename T>
struct Foo
{
    struct Bar
    {
        T data_;
    };
    Bar bar_;
};

template <typename T>
void func(Foo<T>::Bar* bar) // Why is this line wrong???
{
}

int main()
{
    Foo<int> foo;
    foo.bar_.data_ = 17;
    func(&foo.bar_);
    return 0;
}

Ответы [ 2 ]

15 голосов
/ 23 марта 2012

Вы должны иметь следующую подпись

template <typename T>
void func(typename Foo<T>::Bar* bar) // Why is this line wrong???

Однако это не единственная проблема

func(&foo.bar_);

также должно быть

func<int>(&foo.bar_);

Этопотому что вы вызываете шаблонную функцию "func", но ее тип не может быть выведен.Без его типа это выдаст ошибку, такую ​​как

no matching function for call to 'func(Foo<int>::Bar*)'
3 голосов
/ 23 марта 2012

Это зависимое имя , вам нужно сказать:

template <typename T>
void func(typename Foo<T>::Bar* bar) // Tell the compiler explicitly it's a type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...