非テンプレート (つまり「通常の」) クラスがあり、テンプレート フレンド関数が必要な場合、コンパイラ エラーを発生させずに記述するにはどうすればよいですか? 私がやろうとしていることを説明する例を次に示します。
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であり、「バー」は関数ではないことを示しています。ここで何を別の方法で行う必要がありますか?