2

クラス テンプレート パラメーターの 1 つとして、メンバーへのポインターを使用する必要があります。

template <class Base, typename Member, Member Base::*m>
class MemPtrTestUgly
{
...
};

これは次のように使用する必要があります

struct S
{
    int t;
}

MembPtrTestUgly <S, int, &S::t> m;

しかし、私はこれを次のように使用したい:

MemPtrTestNice<S, &S::t> m;

メンバー型は、メンバー ポインターから推定されます。クラスはインスタンス化されていないため、関数テンプレートを使用できませんMemPtrTest(使用される静的関数がいくつかあります)。純粋な C++03 (Boost または TR1 なし) でそれを行う方法はありますか?

4

1 に答える 1

1

部分的な特殊化を使用して、かなり見栄えの良い実装を取得できます。

template <typename TMember, TMember MemberPtr>
class MemPtrTest;

template <typename TBase, typename TType, TType TBase::*MemberPtr>
class MemPtrTest<TType TBase::*, MemberPtr>
{
    // ...
};

これは次のように使用されます。

MemPtrTest<decltype(&S::t), &S::t> m;

もちろん、decltypeメンバー型を暗黙的に指定したくない場合は、これが必要です。

于 2012-02-14T10:51:09.627 に答える