10

型消去機能を備えた小さなポリモーフィック クラスを開発したいのですが、テンプレート化されたコンストラクターのどのバージョンが優れていて、使用する必要があるのか​​疑問に思っています。

値で渡すことができます:

class A
{
    ...
    template< typename T >
    A( T t ) { /* create the underlying model via std::move */ }
    ...
};

または、ユニバーサル参照を使用できます。

class A
{
    ...
    template< typename T >
    A( T &&t ) { /* create the underlying model via std::forward */ }
    ...
};

T(クラス自体ではなく、クラスがコピーされない場合は、ユニバーサル参照を有効にする必要があります)。何か案は?どちらのバージョンも私には同じように見えます。

4

1 に答える 1