5
Tôi muốn tạo lớp có thể chuyển đổi thành lớp khác với thông số mẫu. Dưới đây là MCE về những gì tôi muốn đạt được:Có thể suy ra loại chuyển đổi thành loại templated trong C++ không?
#include <iostream>
template <typename T>
class A {
T value;
public:
A(T value) {this->value = value;}
T getValue() const {return value;}
};
class B {
int value;
public:
B(int value) {this->value = value;}
operator A<int>() const {return A(value);}
};
template <typename T>
void F(A<T> a) {std::cout << a.getValue() << std::endl;}
void G(A<int> a) {std::cout << a.getValue() << std::endl;}
int main()
{
B b(42);
F(b); // Incorrect
F((A<int>)b); // Correct
G(b); // Also correct
}
Có thể làm F(b)
dụ làm việc nếu cả hai class A
và void F
là hàm thư viện và không thể được modifyed?
Không. Gọi 'F' giống như bạn có nghĩa là khấu trừ đối số mẫu. Điều này có nghĩa là các chuyển đổi không được xem xét. Tuy nhiên, bạn có thể gọi 'F (b) '. –
StoryTeller
Tùy thuộc vào thiết kế và trường hợp sử dụng, có thể làm cho 'B' kế thừa từ' A' thay thế? Có thể sử dụng thừa kế 'private'? –