我正在编写一些代码来将C ++类型转换为SQL DB的适当类型。我想识别类型,然后根据它是什么,生成适当的SQL代码。我不确定使用RTTI,auto或decltype可以在这方面做些什么。我有一些想法,但我不确定它们是否可行。
例如(我知道以下可能不是有效的C ++,我只是试图了解这个想法):
if (decltype(some_var) == int) { do_stuff(); }
或
if (decltype(some_var) == decltype(1) { do_stuff(); }
或
switch(decltype(some_var)) {
case int:
do_int_stuff();
break;
case string;
do_string_stuff();
break;
case bool;
do_bool_stuff();
break;
}
或
string get_func_y(int var) {
...
return my_string;
}
string get_func_y(string var) {
...
return my_string;
}
string get_func_y(bool var) {
...
return my_string;
}
...
string SQL = get_func_y(some_var);
任何看起来都会起作用,或者是否有人就如何解决这个问题提出建议?提前感谢你提出任何意见。
答案 0 :(得分:5)
您可以使用简单的元编程功能来确定(在编译时)两种类型是否相同:
template <typename T, typename U>
struct same_type
{
static const bool value = false;
};
template <typename T>
struct same_type< T, T >
{
static const bool value = true;
};
这实际上是否对您的计划有所帮助是一个不同的问题。我会选择简单的函数重载解决方案。
答案 1 :(得分:4)
使用简单函数重载的最后一个选项应该可以正常工作。
答案 2 :(得分:1)
在C ++中,变量和函数具有静态类型。除了滥用强制转换之外,唯一可能的混淆是指向基类的指针是指向基类还是某些派生类。这意味着你的decltypes将作为条件(类派生除外)无用,因为它们将有一个恒定的答案。
重载函数适用于静态类型。使用它们。