私は、その引数の型によって異なって動作する関数print
を書きたいと思っています。C++ enable_ifにデフォルトの実装ができますか?
template <typename T, typename std::enable_if<std::is_array<T>::value, int>::type = 0>
void print(const T &v) {
std::cout << "array: ";
for (const auto &e : v) {
std::cout << e << ", ";
}
std::cout << std::endl;
}
template <typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0>
void print(const T &v) {
std::cout << "integral: " << v << std::endl;
}
template <typename T, typename std::enable_if<!(std::is_array<T>::value || std::is_integral<T>::value), int>::type = 0>
void print(const T &v) {
std::cout << "default: " << v << std::endl;
}
このコードは期待通りに動作しますが、最後の仕様では条件があまりにも複雑である:
は、ここに私の実装です。
最後の方法を簡略化するソリューションはありますか?
あなたはもっと簡単に考えているか分かりません。短い? –
@VaughnCatoはい。大量のケースがある場合、デフォルトの条件節は非常に長くなる可能性があります。 – SaltyEgg