vectorやarrayなどを気にせず標準出力がしたく、以下のようなコードを記述しました。
cpp
1// 一次元配列用(のつもり) 2// 二次元配列でも該当してしまう 3template <typename T> 4auto f(T&& range) -> decltype(std::begin(range), std::end(range), range.back(), void()) { 5 for (const auto& r : range) { 6 if (&r != &range.back()) std::cout << r << " "; 7 else std::cout << r << std::endl; 8 } 9} 10 11// 二次元配列用 12template <typename T> 13auto f(T&& range) -> decltype(std::begin(range), std::end(range), range.back(), std::begin(range.at(0)), std::end(range.at(0)), range.at(0).back(), void()) { 14 for (const auto& r : range) { 15 for (const auto& a : r) { 16 if (&a != &r.back()) std::cout << a << " "; 17 else std::cout << a << std::endl; 18 } 19 } 20} 21 22int main() { 23 std::vector<int> vec(3, 99); 24 f(vec); 25 std::array<int, 4> arr{99, 99, 99, 99}; 26 f(arr); 27 //std::vector<std::vector<int>> vec2(3, vec); 28 //f(vec2); 29 return 0; 30}
以上のコードでfに二次元配列を渡すと複数当てはまってしまいます。
うまく失敗させる方法はありますか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/03/22 16:45
退会済みユーザー
2020/03/23 11:35
2020/03/23 13:51
退会済みユーザー
2020/03/24 00:45