首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C++中创建条件类型定义

如何在C++中创建条件类型定义
EN

Stack Overflow用户
提问于 2013-07-25 17:42:42
回答 2查看 16K关注 0票数 92

我正在尝试这样做:

#include <iostream>
#include <random>

typedef int Integer;

#if sizeof(Integer) <= 4
    typedef std::mt19937     Engine;
#else
    typedef std::mt19937_64  Engine;
#endif

int main()
{
    std::cout << sizeof(Integer) << std::endl;
    return 0;
}

但是我得到了这个错误:

error: missing binary operator before token "("

我怎样才能正确地创建条件类型定义函数呢?

EN

回答 2

Stack Overflow用户

发布于 2013-07-25 17:45:05

使用std::conditional,你可以这样做:

using Engine = std::conditional<sizeof(int) <= 4, 
                               std::mt19937, 
                               std::mt19937_64
                               >::type;

如果你想做一个typedef,你也可以这样做。

typedef std::conditional<sizeof(int) <= 4, 
                         std::mt19937, 
                         std::mt19937_64
                         >::type Engine
票数 35
EN

Stack Overflow用户

发布于 2013-07-25 20:35:26

如果您没有可用的C++11 (尽管如果您计划使用std::mt19937,则似乎有),那么您可以使用Boost Metaprogramming Library (MPL)在没有C++11支持的情况下实现相同的功能。下面是一个可编译的示例:

#include <boost/mpl/if.hpp>
#include <iostream>
#include <typeinfo>

namespace mpl = boost::mpl;

struct foo { };
struct bar { };

int main()
{
    typedef mpl::if_c<sizeof(int) <= 4, foo, bar>::type Engine;

    Engine a;
    std::cout << typeid(a).name() << std::endl;
}

这将在我的系统上打印出损坏的foo名称,因为这里的int是4个字节。

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

https://stackoverflow.com/questions/17854407

复制
相关文章

相似问题

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