使用constexpr-if简化编译
How to do it...
template <typename T> class addable { T val; public: addable(T v) : val{v} {} template <typename U> T add(U x) const { return val + x; } };template <typename U> T add(U x) { auto copy (val); // Get a copy of the vector member for (auto &n : copy) { n += x; } return copy; }template <typename U> T add(U x) const{ if constexpr(std::is_same<T, std::vector<U>>::value){ auto copy(val); for (auto &n : copy){ n += x; } return copy; } else { return val + x; } }addable<int> {1}.add(2); // is 3 addable<float> {1.f}.add(2); // is 3.0 addable<std::string> {"aa"}.add("bb"); // is "aabb" std::vector<int> v{1, 2, 3}; addable<std::vector<int>> {v}.add(10); // is std::vector<int> {11, 12, 13} std::vector<std::string> sv{"a", "b", "c"}; addable<std::vector<std::string>> {sv}.add(std::string{"z"}); // is {"az", "bz", "cz"}
How it works...
There's more...
Last updated