如何在C ++中限制模板参数?

时间:2015-07-05 06:52:32

标签: c++ templates

我有两节课。

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;

1 个答案:

答案 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();