C ++模板函数以模板类为参数

时间:2012-03-23 17:21:18

标签: c++ templates parameters

我正在努力使用以下代码。基本上,我有一个类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 个答案:

答案 0 :(得分:15)

您需要拥有以下签名

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*)'

答案 1 :(得分:3)

这是dependent name,你需要说:

template <typename T>
void func(typename Foo<T>::Bar* bar) // Tell the compiler explicitly it's a type