作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试做这样的事情:
#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 "("
我怎样才能正确地制作条件typedef?
最佳答案
使用 std::conditional
来自 C++11 的元函数。
#include <type_traits> //include this
typedef std::conditional<sizeof(int) <= 4,
std::mt19937,
std::mt19937_64>::type Engine;
请注意,如果您在 sizeof
中使用的类型是模板参数,例如 T
,那么您必须使用 typename
作为:
typedef typename std::conditional<sizeof(T) <= 4, // T is template parameter
std::mt19937,
std::mt19937_64>::type Engine;
或者让Engine
依赖T
为:
template<typename T>
using Engine = typename std::conditional<sizeof(T) <= 4,
std::mt19937,
std::mt19937_64>::type;
那是灵活的,因为现在您可以将其用作:
Engine<int> engine1;
Engine<long> engine2;
Engine<T> engine3; // where T could be template parameter!
关于c++ - 如何在 C++ 中创建条件类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17854407/
我是一名优秀的程序员,十分优秀!