Gra*_*eme 2 c++ templates friend
我有一个带有私有构造函数和析构函数的模板类:
template <typename T>
class Client
{
private:
Client(...) {}
~Client() {}
template <typename U>
friend class Client<T>& initialize(...);
};
template <typename T>
Client<T> initialize(...)
{
Client<T> client = new Client<T>(...);
}
Run Code Online (Sandbox Code Playgroud)
我不确定朋友的正确语法。有人可以帮忙吗?
忽略省略号(我认为这意味着“一堆与问题无关的参数”),这应该有效:
template <typename T>
class Client
{
private:
Client() {} // Note private constructor
public:
~Client() {} // Note public destructor
// Note friend template function syntax
template<typename U>
friend Client<U> initialize();
};
template<typename T>
Client<T> initialize()
{
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
请注意,友元声明本质上与函数声明相同,但friend在返回类型之前添加了关键字前缀。
此外,析构函数是公共的,因此 的用户initialize()将能够破坏返回的 实例Client<>。构造函数仍然是私有的,因此只能initialize()创建它的实例。
上面的代码应该允许它工作:
int main()
{
Client<int> client = initialize<int>();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1881 次 |
| 最近记录: |