友元模板函数(在非模板类中),C++
如果我有一个非模板(即“普通”)类并希望有一个模板友元函数,我该如何编写它而不导致编译器错误? 下面是一个示例来说明我想要执行的操作:
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,给出的具体错误是 错误 C2063,指出“bar”不是函数。 这里需要做哪些不同的事情?
If I have a non-template (i.e. "normal") class and wish to have a template friend function, how do I write it without causing a compiler error? Here is an example to illustrate what I am trying to do:
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();
}
}
I'm using Visual Studio 2005, and the specific error I'm given is error C2063, stating that "bar" isn't a function. What needs to be done differently here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您确定您发布的内容给出了错误吗? 以下(使用 Visual Studio 2005)对我来说效果很好:
Are you sure what you've posted gives the error? The following (using Visual Studio 2005) works fine for me:
这更像是一种解决方法,而不是解决方案,但是您是否尝试过将专业化列为朋友?
This is more of a workaround than a fix, but have you attempted to list the specializations as friends?