我有两节课。
class Item {
};
template <typename ItemType>
class Result {
};
我想实现一个模板,它应该接受Item和Result&lt;项&GT;作为其模板参数(或类似int和Result&lt; int&gt;)。如果参数不符合要求,则应在编译过程中报告错误。
我做了什么:
template <typename ItemType, typename Result>
class Unknown {
public:
Result GetItem() {
Result result;
return result;
}
};
我的问题是,当其他类型作为参数传递时,不会报告任何错误。
// OK
Unknown<Item, Result<Item>> unknown;
Result<Item> result = unknown.GetItem();
// OK
Unknown<Item, SomeOtherResultTemplate<Item>> unknown10;
SomeOtherResultTemplate<Item> result = unknown10.GetItem();
// OK
Unknown<int, Result<int>> unknown;
// Errors should be reported.
Unknown<Item, int> unknown1;
Unknown<Item, Result<int>> unknown2;
Unknown<Item, Result<SomeOtherItem>> unknown3;
Unknown<int, Result<double>> unknown4;
答案 0 :(得分:4)
您可以将Unknown
更改为:
template <typename ItemType>
class Unknown {
public:
Result<ItemType> GetItem() {
Result<ItemType> result;
return result;
}
};
并将其用法更改为:
Unknown<Item> unknown;
Result<Item> result = unknown.GetItem();