1

セットを取り除き、コードから地獄を取得するために、「property」クラスを作成しています。ほぼ成功しましたが、クラスのメンバーに「オーナークラス」を提供したいと思います。

現在、次のようなプロパティを使用する必要があります。

class PropertyUser
{
private:
PROPERTY_PROVIDE(PropertyUser);
                 ^^ I should provide the current class manually here.
public:
PROPERTY_DECLARE(~);
};

私は最後にたくさん試しましたこれはこれです:

template<typename T>
struct OwnerClassTrait
{ };

template<typename T, class C>
struct OwnerClassTrait<T C::*>
{
    typedef C Class;
};

#define PROVIDE_CURRENT_CLASS() \
    void __Dummy_Func__(){ }; \
    typedef OwnerClassTrait<decltype(&__Dummy_Func__)>::Class CurrentClassType

#define SOME_FUNCTION(Name) \
    SomeOtherMember<CurrentClassType> Name

class Foo
{
public:
    PROVIDE_CURRENT_CLASS();
    SOME_FUNCTION(ThisTypeAutomaticallyDetectsCurrentClassType);
};

エラーが発生します:エラーC2039:'Class':は'OwnerClassTrait'のメンバーではありませんdecltypeが誤って(現在のスコープクラスC ::を削除して)OwnerClassTraitに型を提供していることを意味すると思います。

現在、vs2012を使用していることに注意してください。私は何か間違っていましたか?または、これをうまく解決する別の方法がありますか?

4

0 に答える 0