型消去機能を備えた小さなポリモーフィック クラスを開発したいのですが、テンプレート化されたコンストラクターのどのバージョンが優れていて、使用する必要があるのか疑問に思っています。
値で渡すことができます:
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
(クラス自体ではなく、クラスがコピーされない場合は、ユニバーサル参照を有効にする必要があります)。何か案は?どちらのバージョンも私には同じように見えます。