gpt4 book ai didi

c++ - 使用 T::Type 类型定义来默认模板参数

转载 作者:行者123 更新时间:2023-11-28 03:38:21 37 4
gpt4 key购买 nike

是否可以这样做:

template <typename T, typename Comparator = std::less<typename T::Key>>
struct Container
{
std::map<typename T::Key, T*, Comparator> m;
};

这是问题部分:typename Comparator = std::less<typename T::Key>

即在 T 的实现中有一个 typedef 用于比较器的特化。是否总是有必要将比较器使用的东西 (T::Key) 指定为模板的显式参数?

我意识到还有其他方法可以通过更改 T 类来解决这个问题(例如,需要一个显式的 T::compareKey 方法),但问题更多的是是否可以使用模板语法来实现这样的事情。

最佳答案

我确定这是有效的,只要在实例化模板时所有必要的定义都可用,而且肯定是 works for me.

您是否包括 <map> ?您可能还需要包括 <functional>对于 std::less , 虽然我确定 <map> 必须包括在内.

您的编译器是否支持 C++11,您是否启用了该支持?较旧的编译器(或那些配置为严格符合 C++03 的编译器)会因使用 >> 而感到困惑。关闭两个模板参数列表;他们会将其解释为右移运算符。在这种情况下,您可以通过在它们之间添加一个空格来解决问题。

如果这些都不是问题,请包括一个最小的、完整的示例来演示问题,确切的错误消息以及它引用的代码行的指示,并让我们知道您使用的是哪个编译器。

关于c++ - 使用 T::Type 类型定义来默认模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10190821/

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