是否允许在友元声明中为模板参数提供默认值?
class A {
int value;
public:
template<class T = int> friend void foo();
};
Visual Studio 2015 似乎允许这样做。 海湾合作委员会拒绝了。 我在 cppreference 页面上找不到任何内容。
如果你真的想让你的函数 foo() 保持全局,你可以尝试这个:
class A
{
int value;
public:
template<class T> friend void foo();
};
template<class T = int> void foo()
{
//you can use private member of A
A foo;
auto value = foo.value;
}
我的5美分:
如果您使用显式模板实例化,则可以使用辅助函数:
.h文件
class A{
int value;
public:
template<class T>
friend void foo_(); // defined in the .cpp file...
};
template<class T = int>
void foo(); // defined in the .cpp file...
.cpp文件:
template<class T>
void foo_(){
//...
}
template<class T>
void foo(){
return foo_<T>();
}
template void foo<int>();
template void foo<float>();
template void foo<double>();
注意如何无法从客户端代码调用
foo_()
。客户将仅使用 foo()
。