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