0
我有一个Controller
类,它被设计为继承。目前,它有一个name()
纯虚方法,像这样:C++编译时和运行时可用的名称属性
class Controller {
public:
virtual const std::string name() const = 0;
}
的名字确实是一个类的属性,而不是一个实例属性。它不应该在一个子类的实例之间改变,所以真的,虚拟不是在这里做的最好的事情。无论如何,我现在遇到了一个问题,我需要在编译时使用模板函数的名称。显然T::name()
不起作用,并且因为子类不会默认可构造,所以我甚至无法用T()::name()
来破解它。
所以有些事情需要改变,但我无法弄清楚这样做的最好方法。我需要能够在下列情况下访问名称:
- 在编译时,当我有一个子类类型(例如
T::name()
) - 在运行时,当我有一个子类的实例(例如,
instance->name()
) - 在运行时,当我有一个
Controller*
(如指向基类)
name()
不必是方法,它可以是公共属性,或别的东西。但无论我尝试什么,我似乎只能满足上述3个要求中的2个。
任何人都可以提出解决这个问题的好办法吗?
你是什么意思“在编译时”?你需要在编译时使用字符串运行什么样的语句? –
提示:[不可能](https://stackoverflow.com/questions/27123306/is-it-possible-to-use-stdstring-in-a-constexpr) –
在模板函数中,我需要获取名称的传入类型。例如'template bool has_controller()const {...这里需要T :: name()...} –
Kazade