0

重複の可能性:
クラス/構造体にデータメンバーがないかどうかを簡単に判断する方法はありますか?

おそらくテンプレートを使用して、emplyクラスを検出できますか?

struct A {};
struct B { char c;};

std::cout << is_empty<A>::value; //should print 0
std::cout << is_empty<B>::value; //should print 1

//this is important, the alleged duplicate doesn't deal with this case!
std::cout << is_empty<int>::value; //should print 0

C ++ 0xではなく、C ++ 03のみ!

4

1 に答える 1

4

コンパイラが空の基本クラスの最適化をサポートしている場合は、はい。

template <typename T>
struct is_empty
{
    struct test : T { char c; };
    enum { value = sizeof (test) == sizeof (char) };
};

template <>
struct is_empty<int>
{
    enum { value = 0 };
};

より良い:

#include  <boost/type_traits/is_fundamental.hpp>
template <bool fund, typename T>
struct is_empty_helper
{
    enum { value = 0 };
};

template <typename T>
struct is_empty_helper<false, T>
{
    struct test : T { char c; };
    enum { value = sizeof (test) == sizeof (char) };
};

template<typename T>
struct is_empty
{
    enum { value = is_empty_helper<boost::is_fundamental<T>::value, T>::value };
};
于 2011-02-14T17:40:00.643 に答える