一尘不染

使用C ++中的decltype(),auto或RTTI进行类型相等性测试?Boost对此有帮助吗?

sql

我正在编写一些代码,将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);

这看起来像是可行的,还是有人对如何解决这个问题有任何建议?提前感谢您可能提供的任何输入。


阅读 173

收藏
2021-05-05

共1个答案

一尘不染

您可以使用简单的元编程函数来确定(在编译时)两种类型是否相同:

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;
};

那是否真的对您的程序有所帮​​助是另一个问题。我只是去寻找简单的函数重载解决方案。

2021-05-05