gpt4 book ai didi

c++ - 为什么我不能使用模板模板参数将 std::vector 传递给这个函数?

转载 作者:行者123 更新时间:2023-12-01 14:47:31 25 4
gpt4 key购买 nike

我是 C++ 模板的新手,我想编写一个模板函数,该函数根据其参数返回单个对象或对象 vector 。

我有一个包含键/值对的配置类。假设我有键“parent.child.1”,它应该返回一个 id=1 的对象。如果我有键“parent.child”,那么它应该返回 child 下的所有对象。子项下的所有对象都是相同的类型,但不同的子项可能持有不同的对象。

在我看来,生成的代码如下所示:

getParameter<MyObject>(key, value); //value is a referance, if key found copy it into value
getParameter<std::vector<MyObject>>(key, vectorValue); //value is a referance to the vector

我可以通过为每种类型专门化 getParameter 函数来做到这一点,乘以两倍,但我认为如果我确实使用模板,我可以为每种不同类型减少大量样板代码。

我已关注 this other所以问题并在我的代码中使用它像这样(我使用的是 c++11 所以它有点不同):
template<typename T>
void getParameter(const string& key, typename enable_if< !is_vector<T>::value,T>::type& val) {...} //Works fine when calling getParameter<MyObject>(key, value);

template<template<typename...>> class C, typename U>
void getParameter(const string& key, typename enable_if< is_vector<C<U>>::value, C<U>>::type& val) {...}//Fails in compile

当我调用 getParameter<std::vector<MyObject>>(key, vectorValue); 时,它无法替换这两个函数.这是为什么?

最佳答案

第二期getParameter接受两个模板参数,但 getParameter<std::vector<MyObject>>(...)仅指定一个模板参数,则不会选择它。

我想只是制作第二个 getParameter取一个模板参数应该没问题。例如

template<template T>
void getParameter(const string& key, typename enable_if< is_vector<T>::value, T>::type& val) {...}

如果要获取元素类型,可以使用成员类型 value_type std::vector 喜欢 typename T::value_type .

关于c++ - 为什么我不能使用模板模板参数将 std::vector<MyType> 传递给这个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62466467/

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