gpt4 book ai didi

c++ - 如何指定模板参数是类模板,并从另一个模板参数推断其模板类型?

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

考虑一个模板函数:

template <typename OutputContainerType, typename ContainerType>
static OutputContainerType processContainer(ContainerType c)
{
OutputContainerType result;
...
return result;
}

我可以这样调用它没问题:

std::vector<MyClass> v;
const auto result = processContainer<std::set<MyClass>>(v);

但是,我知道该函数将接受并生成不同的容器,但始终具有相同的元素类型。所以必须指定 std::set<MyClass>>是多余的;我想输入 processContainer<std::set>(v)并让函数将项目类型推断为 decltype(v)::value_type .我怎样才能做到这一点?我尝试过不同的东西,比如

template <template<> class OutputContainerType, class ContainerType>
static OutputContainerType<typename ContainerType::value_type> processContainer(ContainerType c) {}

但无论如何都无法编译(如您所见,我对 C++ 模板语法和技巧的理解不是很深)。

最佳答案

如果你不关心分配器,你可以忽略它:

template <template<typename...> class OutputContainerType, template<typename...> class ContainerType, typename ValueType>
static OutputContainerType<ValueType> processContainer(ContainerType<ValueType> c)
{
OutputContainerType<ValueType> result;
// ...
return result;
}

int main() {
std::set<int> s {1, 2, 3};
auto v = processContainer<std::vector, std::set, int>(s);
}

DEMO

关于c++ - 如何指定模板参数是类模板,并从另一个模板参数推断其模板类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29079331/

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