1
指導申報考慮somethign類似如下:爲模板轉換操作符
template <typename T> struct Foo;
template <typename S> struct Bar
{
template <typename T> operator Foo<T>();
// ...
};
class Baz
{
Baz(Foo<int>&);
};
int main()
{
Bar<float> bar;
Baz baz(bar); // Won't work
}
我想用一個模板操作,以避免代碼/複製和粘貼複製到指定一系列可能的轉換。然而,當然,現在在註釋行代碼中進行一系列轉換將不起作用,因爲在C++中,編譯器不會考慮所有形式的模板化操作符,因爲這將是棘手的。
如果我轉而選擇剪切和粘貼,並定義欄如下:
template <typename S> struct Bar
{
operator Foo<int>();
operator Foo<float>();
// many more
// ...
};
現在鏈接轉換可以判斷和發現。我想要的是能夠擁有我的蛋糕並將它吃掉,特別是將操作符定義爲模板,還提供了一系列指導聲明,可以將轉換操作符定義爲非模板:
template <typename S> struct Bar
{
template <typename T> operator Foo<T>();
template operator Foo<int>(); // Not valid C++
template operator Foo<float>(); // Not valid C++
// ...
};
有沒有辦法在C++ 11/C++ 14中完成這項工作?有沒有人對構建代碼的建議有所幫助,以避免複製轉換運算符的定義,但是仍然有一組有限的轉換運算符實例可以像使用單獨定義一樣使用?