template <typename T> struct Test
{
T value;
Test(T valueOfUser = 0):value(valueOfUser) {}
Test<T> operator * (float k) {return Test<T>(value*k);}
};
int main()
{
Test<int> t(5);
Test<int> t1= t*1.999999;
std::cout << t1.value; // 9
return 0;
}
Можно ли сделать так,чтобы округлялось в большую или меньшую сторону в зависимости от полученного значения , только тогда, когда у меня тип int
. С float
и double
округлять конечно не надо
Например, такой вариант (с++17):
#include <cmath>
#include <iostream>
#include <type_traits>
template <typename T> struct Test
{
T value;
Test(T valueOfUser = 0):value(valueOfUser) {}
Test<T> operator * (double k) {
if constexpr (std::is_integral_v<T>)
return Test<T>(std::lround(value*k));
else
return Test<T>(value*k);
}
};
int main()
{
Test<int> t(5);
Test<int> t1= t*1.999999;
std::cout << t1.value; // 10
}
Проверить можно здесь.
#include <iostream>
#include <cmath>
template<typename T>
class basic_wrapper {
public:
explicit basic_wrapper(const T& value)
: value_(value)
{}
protected:
T value_;
template<typename U>
friend std::ostream& operator<<(std::ostream& s, const basic_wrapper<U>& w) {
return (s << w.value_);
}
};
template<typename T>
class wrapper : public basic_wrapper<T> {
public:
explicit wrapper(const T& value)
: basic_wrapper<T>(value)
{}
template<typename U>
friend wrapper operator*(const wrapper& w, U k) {
return wrapper(static_cast<T>(w.value_ * k));
}
};
template<>
class wrapper<int> : public basic_wrapper<int> {
public:
explicit wrapper(int value)
: basic_wrapper(value)
{}
template<typename U>
friend wrapper operator*(const wrapper& w, U k) {
return wrapper(static_cast<int>(std::floor(w.value_ * k)));
}
};
using integer_wrapper = wrapper<int>;
int main() {
integer_wrapper w { 100 };
std::cout << (w * 1.2019) << std::endl;
return 0;
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Мне нужно удалить файл либо же папку в какой либо дерикторииКак это можно сделать? Какие библиотеки подключить нужно?