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 "("

条件付き typedef を正しく作成するにはどうすればよいですか?

4

3 に答える 3

5

C++11 を利用できない場合 (ただし、使用する予定がある場合は利用できるようです)、 Boost Metaprogramming Library (MPL)std::mt19937を使用して、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;
}

ここでは 4 バイトでfooあるため、これは私のシステムのマングルされた名前を出力します。int

于 2013-07-25T12:35:25.597 に答える