朋友模板函数(在非模板类中),C ++

时间:2009-01-19 19:19:39

标签: c++ function templates friend

如果我有一个非模板(即“普通”)类并希望拥有模板友元函数,如何在不引起编译器错误的情况下编写它?这是一个例子来说明我想要做的事情:

template <class T>
void bar(T* ptr);

class MyClass  // note that this isn't a template class
{
private:
    void foo();

    template <class T>
    friend void bar(T*);  // ERROR: compiler gives me all kinds of grief
};

template <class T>
void bar(T* ptr)
{
    if (ptr)
    {
        MyClass obj;

        obj.foo();
    }
}

我正在使用Visual Studio 2005,我给出的具体错误是error C2063,说明“bar”不是函数。这里需要做些什么?

2 个答案:

答案 0 :(得分:4)

您确定发布的内容会出错吗?以下(使用Visual Studio 2005)对我来说很好:

#include <iostream>
template <class T>
void bar(T* ptr);

class MyClass  // note that this isn't a template class
{
private:
    void foo();

    template <class T>
    friend void bar(T*);  // ERROR: compiler gives me all kinds of grief
};

void MyClass::foo()
{
    std::cout << "fooed!" << std::endl;
}

template <class T>
void bar(T* ptr)
{
    if (ptr)
    {
        MyClass obj;

        obj.foo();
    }
}


int _tmain(int argc, _TCHAR* argv[])
{

    int someObj = 1;
    bar(&someObj);

    return 0;
}

答案 1 :(得分:0)

这是一种解决方法而不是修复方法,但您是否尝试将专业列表列为朋友?