は、次のような機能を考える:function1
に渡されたタイプがすでにstd::string
であれば、オーバーヘッドのどのような種類が発生している ID boost :: lexical_castの実行にはどのようなオーバーヘッドがありますか?
template< typename T >
void function1(const T &t)
{
function2(boost::lexical_cast<std::string>(t));
}
?
オーバーヘッドは種類によって異なりますが、私はlexical_cast
になっていますか?
キャストをバイパスするためにオーバーロードされた関数を作成する必要はありませんか?私はlexical_cast
が改訂上にいくつかの最適化を受けていることを理解して例えば:
void function1(const std::string &t)
{
function2(t);
}
template< typename T >
void function1(const T &t)
{
function1(boost::lexical_cast<std::string>(t));
}
ブーストのバージョンでは、あなたの答えにreleventすることができます。
まず第一に、非常に簡単である、
lexical_cast_copy::lexical_cast_impl
呼び出されます、しないでください関数テンプレートの特殊化、*ちょうどオーバーロード*。 – Xeo@ Xeo良い点[ここで説明](http://stackoverflow.com/questions/7108033/template-specialization-vs-function-overloading)編集されました。 –