4

可能重复:
如何允许模板功能具有朋友(-like)访问权限?

如何让函数模板Load朋友访问类Foo

这里的目标是限制对构造函数的访问:只能构造函数模板Load

CODE(请忽略内存泄漏)

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>();
}
4

2 回答 2

3

这应该有效。

template<typename T> T const& Load() { return *(new T); }


    class Foo {
        Foo() { } 

        friend Foo const& Load<Foo>();
    };
于 2012-12-23T05:51:30.147 回答
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;
}
于 2012-12-23T05:51:52.080 回答