セットを取り除き、コードから地獄を取得するために、「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を使用していることに注意してください。私は何か間違っていましたか?または、これをうまく解決する別の方法がありますか?