1

我正在编写我的“属性”类来摆脱设置并从我的代码中得到地狱。我几乎成功了,但我想为班级成员提供“所有者班级”。

目前我应该使用这样的属性:

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' : is not a member of 'OwnerClassTrait' 我认为这意味着 decltype 错误(删除当前范围类 C::) 向 OwnerClassTrait 提供类型。

请注意,我现在使用的是 vs2012。我是不是有些不对劲?或者有另一种方法可以很好地解决这个问题?

4

0 回答 0