Nếu tôi có một cấu trúc chung/lớp:Làm thế nào để quảng cáo hai loại mẫu cho các hoạt động arithmitic như các loại nội trang?
template<typename T>
struct Container
{
T value;
Container(const Value& value) : value(value) { }
};
Và tôi muốn thực hiện một thao tác trên hai trong số họ:
template<typename T, typename U>
Container<T> operator+(const Container<T>& lhs, const Container<U>& rhs)
{
return Container<T>(lhs.value + rhs.value);
}
Vấn đề là nếu lhs
là loại Container<int>
và rhs
thuộc loại Container<float>
, sau đó tôi sẽ nhận lại Container<int>
. Nhưng nếu tôi phải làm auto result = 2 + 2.0f
, thì result
sẽ thuộc loại float
. Vì vậy, hành vi không nhất quán giữa các loại nội trang và các loại tùy chỉnh.
Vì vậy, làm cách nào tôi có thể bị quá tải operator+
và làm cho nó trở về Container<float>
, giống như cách C++ xử lý quảng cáo số học với các loại nội trang?
bạn có thể sử dụng C++ 11? –
@PiotrSkotnicki Có. – Therhang