2

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

任何这些看起来都可以工作,或者有没有人有关于如何去做的建议?提前感谢您提供的任何意见。

4

3 回答 3

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

这是否真的对你的程序有帮助是一个不同的问题。我会选择简单的函数重载解决方案。

于 2010-08-10T15:06:16.373 回答
4

您使用简单函数重载的最后一个选项应该可以正常工作。

于 2010-08-10T15:04:39.453 回答
1

在 C++ 中,变量和函数具有静态类型。除了滥用强制转换之外,唯一可能的混淆是指向基类的指针是指向基类还是派生类。这意味着您的 decltypes 作为条件将毫无用处(类派生除外),因为它们将有一个恒定的答案。

重载函数适用于静态类型。使用它们。

于 2010-08-10T15:08:31.923 回答