テンプレートを扱う際に私が悩まされた小さな問題に直面しました。ここでは一例です:私は_returnTypeを必要はありませんテンプレートパラメータとして関数ポインタを与えるので、しかし、それは関数のシグネチャですぐそこです、(あなたがそれを試してみたい場合はhttp://cpp.sh/)テンプレート関数のポインタとしてのテンプレート関数
template<class _returnType, _returnType (*_function)()>
_returnType aliasGetter() { return _function(); }
int getCoolNumber() { return 42; }
int main()
{
std::cout << aliasGetter<int, &getCoolNumber>(); //42
}
このコードは動作しますが、問題は、私が試してみても、この追加のテンプレートパラメータを取り除く方法を見つけることができないということです。
aliasGetter
は、テンプレートパラメータ(ゲッタのエイリアスへのポインタ)を1つだけ取ることができますか? それができないのなら、どうしてですか? C++ 17では
1つのテンプレートパラメータを使用して、テンプレート引数の減算に頼ってはどうですか? – WhiZTiM
@WhiZTiMこれは、実行時に関数ポインタを呼び出しに渡す必要があります。 –
2番目のテンプレートパラメータがそれに依存しているため、これが必要です。 https://functionalcpp.wordpress.com/2013/08/05/function-traits/で何かを構築するかもしれませんが、テンプレートパラメータを保存することはできません。 – knivil