我正在尝试改进我的通用架构,并且我已经决定使用这种模糊上下文引用的系统对我的目的来说是理想的。但是,我无法弄清楚如何使语法工作。我甚至都不知道这样的事情是否可行!我有一些稍微复杂的替代方案可以完成同样的事情,但这是最好的:
class IContained
{
public:
virtual int getInt() = 0;
};
typedef std::shared_ptr<IContained>IContainedPtr;
template<template<class RefType, RefType& itsRef> class ContainedType>
class TestClass
{
TestClass() :
myContained(new ContainedType < TestClass, *this>())
{
}
int getContextInt()
{
return 3;
}
IContainedPtr myContained;
};
template<class RefType, RefType& itsRef>
class Contained:
virtual public IContained
{
int getInt()
{
return itsRef.getContextInt();
}
};
TEST(POTATO, PARTY)
{
TestClass<Contained> myTest();
int thing = myTest.myContained->getInt();
EXPECT_EQ(thing, 3);
}
答案 0 :(得分:0)
我不确定您要实施什么,但我可以解释为什么您无法使用
*this
作为模板参数。模板为您提供编译时多态性。这意味着所有模板参数都应该在编译时知道。
this
是一个类实例变量,是类实例的地址,因此在编译期间无法确定。与
相同*this