型を使用してテンプレートを作成し、その型を含むテンプレート引数を持つ関数を渡したいと思います。
これが私が現在持っているものです:
#include <iostream>
void fooRef(int& ref) { std::cout << "In ref" << std::endl; }
void fooPtr(int* ptr) { std::cout << "In ptr" << std::endl; }
template<typename T, typename F>
void Print(T arg, F func) {
//DoABunchOfStuff();
func(arg);
//DoSomeMoreStuff();
}
int main() {
int x = 5;
int& ref = x;
Print<int*, void(*)(int*)>(&x, &fooPtr);
Print<int&, void(*)(int&)>(ref, &fooRef);
}
これは機能しますが、関数の呼び出し元に余分な冗長性があるように感じます。理想的には、次のような呼び出しが必要です。
Print<int*, fooPtr>(ptr);
Print<int&, fooRef>(ref);
Print 関数の呼び出しを簡素化する方法はありますか?