gpt4 book ai didi

c++ - 各种类型的默认模板参数

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

我正在尝试创建一个程序,我必须在其中使用模板,但我现在有点卡住了。这是我的代码的一部分:

    template <typename _Type, typename _Comparator = equal_to</*char*/> >
class CSearch {
public:
CSearch();
CSearch(const _Comparator & cmp);
void Add(int id,
const _Type & needle);
set<int> Search(const _Type & hayHeap) const;
private:

struct CSElem {
int id;
_Type sekvence;
};
vector<CSElem> data;
_Comparator comp;
};

template <typename _Type, typename _Comparator>
CSearch<_Type, _Comparator>::CSearch() {
comp = _Comparator();
}

.......

template <typename _Type, typename _Comparator>
void CSearch<_Type, _Comparator>::Add(int id, const _Type& needle) {
CSElem temp;

.....

data.push_back(temp);
}

template <typename _Type, typename _Comparator>
set<int> CSearch<_Type, _Comparator>::Search(const _Type& hayHeap) const {
typename _Type::const_iterator j, t;

...... //trying to find out which items of the variable data are part of hayHeap

if (comp(*t, *j)) {
......
}

......

}

/*
*
*/
int main(int argc, char** argv) {
CSearch <string> test1;
test1 . Add(0, "hello");
test1 . Add(1, "world");
test1 . Search("hello world!");

CSearch <vector<int> > test2;

....

}

所以问题是,当我不向模板提供第二个参数时,比较器对于存储在测试变量中的类型应该是 equal_to,所以对于字符串,它应该是

equal_to<char>

或整数 vector

equal_to<int>

我已经考虑了很长时间,但仍然没有想出如何声明模板或做什么才能使它具有前面提到的功能。如果有人能给我提示或示例来说明如何解决这个问题,我将非常高兴。

谢谢

最佳答案

您可以在模板签名中使用先前的模板参数来形成后续模板参数的默认参数。此外,您可以利用所有标准容器都为所包含元素的类型定义 value_type 别名这一事实:

template <typename _Type, 
typename _Comparator = equal_to<typename _Type::value_type> >
// ^^^^^^^^^^^^

std::string 也有成员函数和类型别名,允许它们被 C++ 标准库的通用算法使用,所以当 _Typestd::string

关于c++ - 各种类型的默认模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15972885/

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