私は何かに道を究明しようとしている私の頭をラッキングしてきました。私はここに投稿して、誰かがアイディアを持っているかどうかを知ることができると思った。次のことを考えてみましょう:クラスへのポインタをとるテンプレート関数が必要ですが、クラス型やメンバー型を渡す必要はありません
template <typename S, typename T, T S::* pMember>
bool SortByMember(const S& L, const S& R)
{
return L.*pMember < R.*pMember;
}
...
struct SomeStruct
{
int SomeMember;
};
void SomeFunction(void)
{
GetSortByMember<&SomeStruct::SomeMember>();
}
私はSortByMemberの対応するインスタンス化に関数ポインタを返すために、機能、GetSortByMemberをしたいと思います。しかし、私は、ユーザーがクラス型とメンバ型を渡す必要がないように、GetSortByMemberを宣言/定義する方法について考えることはできません。これは:
GetSortByMember<SomeStruct, int, &SomeStruct::SomeMember>();
が過度に冗長であり、メンバータイプを記載する必要があります。私はおそらくブーストライブラリの解決策があると確信していますが、私はむしろ私が取り組んでいるプロジェクトにその依存関係を導入したくないです。
私はpsudocodeで使用した正確な構文が得られるとは思っていませんが、おそらくテンプレートクラスやマクロで何かできますか?
SortByMemberのシグネチャは、関数ポインタを使用するクラスによって予期されるため、変更することはできません。
マクロを使用すると、エンデバー全体が非常に単純なように見えますか? –
"member _function_へのポインタ"のような "メンバーへのポインタ"のようなものはありません。 –
^これは間違っています。http://stackoverflow.com/questions/670734/c-pointer-to-class-data-memberを参照してください。 –