首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否在C++中使用decltype()、auto或RTTI进行类型相等测试?Boost有什么东西可以解决这个问题吗?

是否在C++中使用decltype()、auto或RTTI进行类型相等测试?Boost有什么东西可以解决这个问题吗?
EN

Stack Overflow用户
提问于 2010-08-10 22:57:53
回答 3查看 1.3K关注 0票数 2

我正在编写一些代码来将C++类型转换为适用于SQL的类型。我希望标识类型,然后根据类型生成适当的SQL代码。我不确定通过使用RTTI、auto或decltype可以在这方面做些什么。我有一些想法,但我不确定它们是否可行。

例如(我知道以下内容可能不是有效的C++,我只是想让大家明白我的意思):

代码语言:javascript
复制
if (decltype(some_var) == int) { do_stuff(); }

代码语言:javascript
复制
if (decltype(some_var) == decltype(1) { do_stuff(); }

代码语言:javascript
复制
switch(decltype(some_var)) {
    case int:
        do_int_stuff();
        break;
    case string;
        do_string_stuff();
        break;
    case bool;
        do_bool_stuff();
        break;
}

代码语言:javascript
复制
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);

这一切看起来都是可行的,或者有没有人有关于如何做的建议?提前感谢您提供的任何意见。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-10 23:06:16

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

代码语言:javascript
复制
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;
};

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

票数 5
EN

Stack Overflow用户

发布于 2010-08-10 23:04:39

使用简单函数重载的最后一个选项应该可以很好地工作。

票数 4
EN

Stack Overflow用户

发布于 2010-08-10 23:08:32

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

重载函数可以很好地处理静态类型。使用它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3450327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档