如何让函数模板朋友访问一个类?

时间:2012-12-23 05:34:36

标签: c++ templates friend

  

可能重复:
  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>();
}

2 个答案:

答案 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;
}