gpt4 book ai didi

c++ - c++ 方法头部的可选函数

转载 作者:太空宇宙 更新时间:2023-11-04 12:48:59 24 4
gpt4 key购买 nike

我有一个小问题,因为我不知道如何用 compare cmp 编写我的模板方法,比如可选参数(compare cmp 是函数,不是变量)。

这对我来说非常困难,因为我对 c++ 中的模板和 c++ generaly 中的新手不熟悉 :D

我想,当我不使用compare src时,compare src return true(因为if健康)状况...)有什么想法吗? :)

   template<typename compare>
map<_NODE, int> Find(const _NODE& src, const int& max, const compare& cmp) const {
map<_NODE, int> finded;
queue<_NODE> q;
_NODE town;
//src doesn't exists
if (mapTown.find(src) == mapTown.end()) {
ostringstream oss;
oss << "unknown " << src;
throw invalid_argument(oss.str());
}
//begin of queue
q.push(src);
finded.insert(make_pair(src, 0));
//BFS algorithm
while (!q.empty()) {
town = q.front();
q.pop();
//we are looking for all neighborhood of town in max length
for (const pair<_NODE, list<_EDGE>> i : (mapTown.at(town))) {
for (const _EDGE j : i.second) {
if (finded.count(i.first) == 0 && finded[town] < max && cmp(j)) {
finded.insert(make_pair(i.first, finded[town] + 1));
q.push(i.first);
}
}
}
}
return finded;
}

最佳答案

How [to] write my template method with compare cmp like optional parameter

好吧,鉴于您提供的签名:

Find(
const _NODE& src,
const int& max,
e compiler and the standard library." Not exactly. Compiler reserved names start with double underscore or with underscore and upper letter (which is the case actually). Otherwise it's just ugly and not recommen const compare& cmp
) const;

你会这样做:

template<typename compare>
map<_NODE, int>
Find(
const _NODE& src,
const int& max,
compare cmp = {}
) const;

但是,请注意您的命名做法有些问题:

  • 通过动词名称调用不是简单仿函数的类,例如Find,有点困惑。
  • 应该使用以下划线和大写字母开头的名称来命名您自己的构造,例如_NODE;这是为编译器和标准库保留的。
  • 模板参数通常使用 TitleCase,所以我会使用 Compare 而不是 Compare

关于c++ - c++ 方法头部的可选函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49959776/

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