作为减少复制/粘贴相同代码的繁忙工作的一种方法,我转向黑暗的一面并使用宏来为我做.
请记住,这是来自更大的生产代码,如果没有这样的宏,任务会更加痛苦.具体来说,它是由单个字符串驱动的静态和虚拟函数的混合.
现在我知道宏可以让你遇到麻烦,并且这种方式使用它们非常"臭",所以我想要更好的东西,但是我很难想出一些简单明了的东西:
#define LAZY(name)\
static const char * identify() { return name; }\
virtual const char * getName() { return identify(); }
class A{
public:
LAZY("class A")
void foo(){
std::cout << getName() << std::endl;
}
};
class B: public A{
public:
LAZY("class B")
};
std::string somevar( B::identify() );
int main(void){
B b1;
B.foo();
}
Run Code Online (Sandbox Code Playgroud)
我采取的其他一些方法(以及它们失败的原因)如下:
template<class T>
class Base{
public:
virtual const char * getName(){ return T::identify(); }
// All other functions driven by string. IE:
static void register(){ …Run Code Online (Sandbox Code Playgroud) c++ ×1