我正在编写我的'属性'类来摆脱set并从我的代码中获取内存。 我几乎成功地取得了成功,但我想向班级成员提供“所有者班级”。
目前我应该使用这样的属性:
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。 我有些不对劲吗? 或者有另一种方法可以很好地解决这个问题?