4

重複の可能性:
テンプレート関数に友人 (のような) アクセスを許可するにはどうすればよいですか?

Load関数テンプレートのフレンドに class へのアクセス権を与えるにはどうすればよい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 に答える