8

私はすでにほとんどそこにいます:

#include <boost/preprocessor.hpp>
#define COUNT(...) BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)
COUNT(1,2,3)
COUNT(1,2)
COUNT(1)
COUNT()

-EGCC でフラグを指定してこれを実行すると、次のように出力されます

3 2 1 1

私が必要とするのは:

3 2 1 0

ここで何が間違っていますか?私は を使用するつもりはboost preprocessorありませんが、ソリューションを可変長にする必要があります。

これを機能させる方法はありますか?

4

1 に答える 1

6

ではCOUNT()、空の引数が 1 つあります。

次のようなものを使用できます。

#define PP_IS_EMPTY(...) (#__VA_ARGS__[0] == '\0' ? 1 : 0)
#define PP_COUNT(...) ((!PP_IS_EMPTY(__VA_ARGS__)) * (BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)))

あるいは、可変個のテンプレートが解決策になる場合があります。

template <typename ... Ts>
constexpr std::size_t Count(Ts&&...) { return sizeof...(Ts); }
于 2014-08-08T10:48:37.633 に答える