を作成する方法はありますvector< mem_fun_t< ReturnType, MyClass > >
か?
私が見ているエラーは次のとおりです。
error C2512: 'std::mem_fun1_t<_Result,_Ty,_Arg>' : no appropriate default constructor available
を作成する方法はありますvector< mem_fun_t< ReturnType, MyClass > >
か?
私が見ているエラーは次のとおりです。
error C2512: 'std::mem_fun1_t<_Result,_Ty,_Arg>' : no appropriate default constructor available
なぜそれが機能しないのか本当にわかりませんが、実際にはかなり醜い解決策です。vector<function<ReturnType(MyClass*)>>
C++03バインダーに存在するこれらの問題を回避してください。
あなたは確かにそのようなベクトルを作成することができます。
#include <vector>
#include <functional>
#include <iostream>
struct MyClass
{
int a() { return 1; }
int b() { return 2; }
};
int main()
{
std::vector<std::mem_fun_t<int, MyClass> > vec;
vec.push_back(std::mem_fun(&MyClass::a));
vec.push_back(std::mem_fun(&MyClass::b));
MyClass x;
for (size_t i = 0; i != vec.size(); ++i) {
std::cout << vec[i](&x) << '\n';
}
}
問題が発生した場合は、エラーメッセージを注意深くお読みください。たとえば、std::mem_fun
渡すものに応じて、あらゆる種類のラッパーを返すことができます。
または、実際、ブーストまたはC++0xに切り替えfunction
ます。
編集:この特定のエラーメッセージで、含まれている型のデフォルトコンストラクターを呼び出す何かをしていると思います(たとえばresize
、ベクトルのコンストラクターでサイズを指定します)。これらの機能は使用できません。
mem_fun_t
コンテナに格納するための要件を満たしているため(コピー構築可能で割り当て可能)、答えは「はい」です。
ただし、デフォルトでは構築可能または比較可能ではないため、それらのコンテナでは実行できないことがいくつかあります。
表示されているエラーは、サイズを変更するか、サイズを使用して作成しようとしたことが原因です。