0

いくつかの計算を実行するために、型パラメーターとしてファンクターを渡す必要があるテンプレートがあります。実際に計算を実行するために使用したい別の関数に基づいて、このファンクターを特殊化したいと思います。基本的に、私はこれをやりたいです(これは合法ではありません。ファンクタを再定義しています):

template<typename T, int (*func)(int)>
struct Functor
{
    T val;
    int operator()(int x) { return func(2); }
};

template<typename T, int (*func)(int, int)>
struct Functor 
{
    T val;
    int operator()(int y) { return func(y, 2); }
};

Component<Functor<calculationFunction1>> comp1;
Component<Functor<calculationFunction2>> comp2;

auto result1 = comp1.Compute();
auto result2 = comp2.Compute();

これも機能させるために部分的な特殊化を使用してみましたが、それも合法ではないようです。2 つの関数のシグネチャが異なるため、必要なものを取得できるかどうかはわかりません。ここでやろうとしていることを達成するための最良の方法は何ですか?

4

1 に答える 1