gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:47:43 25 4
gpt4 key购买 nike

我有两个类(class)。

class Item {
};

template <typename ItemType>
class Result {
};

我想实现一个模板,它应该接受 Item 和 Result< Item> 作为它的模板参数(或者类似 int 和 Result< int> 的参数)。如果参数不符合要求,编译过程中应该报错。

我做了什么:

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;

最佳答案

您可以将 Unknown 更改为:

template <typename ItemType>
class Unknown {
public:
Result<ItemType> GetItem() {
Result<ItemType> result;
return result;
}
};

并将其用法更改为:

Unknown<Item> unknown;
Result<Item> result = unknown.GetItem();

关于c++ - 如何在 C++ 中限制模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31227865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com