と仮定私は、任意のコンテナタイプ(C++ 11)の上に何かをする機能を持っている:私はこのような別の関数からこの関数を呼び出すことができます他の関数に関数テンプレートを渡し
template<class containerType>
void bar(containerType& vec) {
for (auto i: vec) {
std::cout << i << ", ";
}
std::cout << '\n';
}
:
をtemplate<class funcType>
void foo(funcType func) {
std::vector<int> vec = { 1, 2, 3 };
func(vec);
}
:その後、fooは次のようになり、
void foo() {
std::vector<int> vec = { 1, 2, 3 };
bar(vec);
}
は、今私はちょうどバーのような異なる機能を持っていると仮定し、私はFOOに、これらの機能のいずれかを渡したいです
しかし、このようFOOを呼び出す:(バーは、関数が、関数テンプレートではないので、かなり明確)
foo(bar);
は動作しません。これにはいい解決策がありますか?この仕事をするためにfooをどのように定義する必要がありますか?
編集:ここでは、fooはint型のベクトルで動作することがわかっている場合、あなたはbar< std::vector<int> >
関数を渡すことができ
#include <iostream>
#include <vector>
#include <list>
template<class containerType>
void bar(containerType& vec) {
for (auto i: vec) {
std::cout << i << ", ";
}
std::cout << '\n';
}
template<typename funcType>
void foo(funcType func) {
std::vector<int> vals = { 1, 2, 3 };
func(vals);
}
int main() {
// foo(bar); - does not work.
}
最小のコンパイル可能な例がありません –
なぜ関数ポインタを使用しますか?私は、ファンクタを使用する方が良いと思います。 – AlexTheo
@AlexTheoご意見ありがとうございます。もちろん、ファンクタを使うことは簡単です!ボブは回答と同様の解決策を投稿しました。私はそれに行くよ! – fdlm