可能重复:
How to allow template function to have friend(-like) access?
如何让功能模板Load
朋友访问课程Foo
?
此处的目标是限制对构造函数的访问:只能构造函数模板Load
。
代码(请忽略内存泄漏)
class Foo {
Foo() { }
template<> friend Foo const& Load<Foo>(); // error here
};
template<typename T>
T const&
Load() { return *(new T); }
int main( int argc, char* argv[] )
{
Foo const& f = Load<Foo>();
}
答案 0 :(得分:3)
这应该有用。
template<typename T> T const& Load() { return *(new T); }
class Foo {
Foo() { }
friend Foo const& Load<Foo>();
};
答案 1 :(得分:2)
这样做应该有效:
#include <iostream>
template <typename T>
const T&
load(void)
{
return *(new T);
}
class foo
{
private:
foo(void)
{
std::cout << "hello!" << std::endl;
}
template <typename T>
friend const T& load();
};
int
main(void)
{
const foo& f = load<foo>();
return 0;
}