gpt4 book ai didi

c++ - 非特化 C++ 模板参数

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

基本上我想做的事情如下。假设我们有一个模板成员函数foo:

template <typename T>
T SomeClass::foo();

并且用户以某种方式将 ma​​p< string, int > 作为模板参数传递:

foo<map<string, int>>();

我想在这里做的是,在定义函数foo 时,获取内部类型stringint。我尝试了很多猜测来取消对论点的专门化,但无济于事。

template <map<typename K, typename V>>
map<K, V> SomeClass::foo(); // absolutely illegal

我考虑过使用偏特化,但它没有奏效,因为 foo 是一个类成员函数。

最佳答案

如果你想要一种从模板中获取内部类型的通用方法,你可以使用显式特化:

template <typename T>
struct unpack;

template <template <typename...> class C, typename A, typename B>
struct unpack<C<A, B>>
{
using first = A;
using second = B;
};

用法:

static_assert(std::is_same_v<string,
typename unpack<map<string, int>>::first
>);

static_assert(std::is_same_v<int,
typename unpack<map<string, int>>::second
>);

如果您只关心在调用函数时这样做,您可以将函数设为模板:

template <typename K, typename V>
void foo(std::map<K, V>);

关于c++ - 非特化 C++ 模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51673275/

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