【发布时间】:2015-01-29 15:28:35
【问题描述】:
我的代码中有这些行:
//lines in mycode.c++
QString str = "...some id...";
if( str == "int")
foo< int>()
else if( str == "QString")
foo< QString>()
...
我需要创建一种机制以在此条件语句中包含自定义类型。因此,任何程序员都可以注册他的类和他的 foo 模板函数的实现。
我想是这样的:
//A.h -- custom class
class A { };
template< >
void foo< A>() { ... };
DECL( A, "A"); //macro to declare class
我想要 mycode.c++ 中的条件语句,它会自动考虑类 A 的声明,所以它会有额外的行:
else if( str == "A")
foo< A>()
我可以有这样的效果:
//common.h
void process_id( QString str) {
if( str == "int")
foo< int>()
else if( str == "QString")
foo< QString>()
...
else if( str == "A") //this lines programmer put manually
foo< A>();
}
//mycode.c++
#include "common.h"
QString str = "some_id";
process_id( str);
但是如果程序员忘记编辑 common.h 文件怎么办?
我想,也许是使用 C 宏系统,或者不知何故 Qt 预编译。有可能吗?
【问题讨论】:
-
当然可以。但是您需要注意,在某些时候,程序员必须提供可能的字符串列表及其结果,因此您仍然会遇到几乎相同的问题(尽管语法可能会更好一点)。
-
您是否考虑过使用工厂/地图而不是
if/else来调度呼叫? -
这感觉完全倒退了。既然可以使用 dispatch,为什么还要使用巨大的
if块? -
@MarkB 在我的 mycode.c++ 中,我需要使用由运行时变量决定的模板参数调用函数。如果我可以在没有 if/else 的情况下做到这一点 - 没关系。
-
@JohnDibling 调度?
标签: c++ qt compile-time qt4.8 pre-compilation