std :: is_arithmeticテンプレートが適用される型でのみ使用したいクラスを作成しています。私のコードは次のとおりです。
#include <type_traits>
template<typename A, typename B>
class Stream {};
template <typename T>
class Stream <typename T,
typename std::enable_if<std::is_arithmetic<T>::value>::type * = nullptr> {
//...
};
コンパイラは、「>」を予期していたため、「=」は構文エラーであると言っていますが、これはあまり意味がありません。部分的なテンプレートの特殊化をまだ完全に把握していないように感じますが、何が欠けていますか?
特殊化では、クラス名に続くテンプレートパラメータリストには、タイプと値のみが含まれている必要があります。
そこにデフォルトの引数を入れることはできません。それらはプライマリテンプレートに属しています。
そして、typename
そこには必要ありません(たとえば、依存型がない限りtypename std::enable_if<...T...>
)。
コードの動作バージョンは次のとおりです。
template<typename A, typename = void>
class Stream {};
template <typename T>
class Stream<T, std::enable_if_t<std::is_arithmetic_v<T>>>
{};
非void
型を2番目のパラメーターに渡すことで、チェックを回避できることに注意してください。static_assert(std::is_void_v<T>);
偶発的な誤用を防ぐために、おそらくプライマリテンプレートにを追加する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加