私は関数int foo()
を持っています、そして、私は、以下の2つの異なるモードを持っているといいと思います。既存の関数をテンプレートでオーバーロードするのは悪い習慣ですか?
template<typename T>
int foo() { doDefaultStuff; }
template<> int foo<FastMode> { doFastStuff; }
はその後、私は
if (enable_fast_mode)
a = foo<FastMode>();
else
a = foo<>();
ように私のテンプレートを起動しようとする。しかしno matching function for call to 'foo()'
が、それは悪い習慣が両方int foo()
とtemplate<> int foo()
、 を宣言するか、私がすべきであるとしてelse
部分はコンパイルされませんint foo<void>()
でデフォルトモードを起動しますか?
enum class Mode
{
Slow,
Fast,
Default
};
template<Mode T = Mode::Default>
int foo() { ...; }
template<>
int foo<Mode::Fast>() { ...; }
これはMode::Default
にそれがデフォルトであるため可能foo<>()
のような呼び出しを行う:あなたはこのような何かを行うことができ、あなたの特定の問題については
それは悪い習慣ではありません*それだけでは、それを達成するためのより良い方法があります。 – Rakete1111
'foo()'と 'fastfoo()'だけではないのはなぜですか?テンプレートは何を得ますか? –
これは過負荷ではありません。それは専門です。テンプレート引数はオプションではなく、あなたはそれを提供していないので、 "高速"と "デフォルト"は間違った名前です。私はColinと同意します。テンプレートは、あなたが現在使っていないパラメータのうちの1つで控除を利用することを計画していない限り、無意味に見えます。 – WhozCraig