gpt4 book ai didi

c++ - 如何专用于模板模板参数

转载 作者:行者123 更新时间:2023-11-30 05:08:53 24 4
gpt4 key购买 nike

我想使用模板化类型专门化一个函数,但我无法获得所需的结果。

考虑下面的简单例子

#include <iostream>
#include <typeinfo>
#include <vector>


template <typename T>
void foo(){
std::cout << "In foo1 with type: " << typeid(T).name() << std::endl;
}

template< template<class, class...> class VEC, typename T>
void foo(){
std::cout << "In foo2 with vec type: " << typeid(VEC<T>).name()
<< " and template type: " << typeid(T).name() << std::endl;
}


int main() {
foo<int>();
foo<std::vector, int>();
foo<std::vector<int>>(); // Would like this to call the second version of foo
}

其输出为

In foo1 with type: i
In foo2 with vec type: St6vectorIiSaIiEE and template type: i
In foo1 with type: St6vectorIiSaIiEE

有没有办法为 foo 的第二个版本编写模板签名,用于最后一次调用 foo(使用 std::vector 模板参数)?

谢谢!

最佳答案

由于您不能部分特化函数模板,通常的方法是使用辅助类模板:

template <typename T> struct X
{
static void f() { std::cout << "Primary\n"; }
};

template <template <typename...> class Tmpl, typename T>
struct X<Tmpl<T>>
{
static void f() { std::cout << "Specialized\n"; }
};

template <typename T> void foo() { X<T>::f(); }

关于c++ - 如何专用于模板模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46534231/

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