我想定義一個類模板,該模板需要對正在定義的類的實例進行操作的函數模板參數。需要函數模板參數的類模板,該函數模板參數對正在定義的類的實例進行操作
這是或類似的事情嗎?
我知道我可以定義轉換構造函數,但是由於這個簡化示例中不清楚的原因,我希望能夠改變類的功能而不更改其定義或創建派生類型。
我知道我可以包含函數指針成員並使用setter來修復它們的功能,但我寧願使用聲明性typedef而不是以編程方式修復該類的功能。
template
< typename T
, MyClass<X> (to_X)(MyClass<T>)
, MyClass<T> (from_X)(MyClass<X>)
>
class MyClass {
T value;
MyClass(T v) : value(v) {}
// is it possible to use to_X and from_X template args
// to declare member functions ...
}
MyClass<int> to_int(MyClass<std::string> value) {
// return result of conversion
}
MyClass<std::string> to_string(MyClass<int> value) {
// return result of conversion
}
MyClass<std::string, to_string, to_int> foo1 =
MyClass<std::string, to_string, to_int>("5");
MyClass<int, to_int, to_string> * foo2 = foo1.to_int();
如何執行的模板參數重疊typeness即T = int和TO = INT(串) – user3666939
@ user3666939不強制它。只能通過與T協同工作的策略。這是一種常見模式,請參閱標準容器的分配器,例如 – Manu343726
,您可以提供FROM和TO的示例定義。我很困惑,因爲我不知道如何根據MyClass來定義FROM或TO。 –
user3666939