gpt4 book ai didi

c++ - vector 类型的模板类特化 - 不同的有效语法?

转载 作者:太空狗 更新时间:2023-10-29 21:39:28 25 4
gpt4 key购买 nike

在下面的代码片段中,是 template<>可选专业?我是否包含它有什么区别吗?我的第一直觉是将它包括在内,因为它或多或少意味着它是一个特化。它在 g++ 4.9.2 和 Intel 16 下都可以编译

#include <vector>
#include <iostream>

template<typename T>
struct PrintMe
{
static void Print(const T & t)
{
std::cout << "In general templated struct: " << t << "\n";
}
};


template<> // <--- optional?
template<typename T>
struct PrintMe<std::vector<T>>
{
static void Print(const std::vector<T> & t)
{
std::cout << "In general specialization for vector: " << t.size() << "\n";
for(const auto & it : t)
std::cout << " " << it << "\n";
}

};


int main(void)
{
PrintMe<int>::Print(5);
PrintMe<double>::Print(5);
PrintMe<std::vector<float>>::Print({10,20,30,40});

return 0;
}

注意:出于好奇,我尝试添加多个 template<> .即,

template<>
template<>
template<>
template<typename T>
struct PrintMe<std::vector<T>>

这仍然可以使用 Intel 进行编译,但不能使用 g++。不确定那是什么意思,但这很有趣。

注2:哇,这和我5年前的一个问题非常相似:Templated class specialization where template argument is a template .在那里它被称为冗余语法。

最佳答案

给定类模板的定义,

template<> // <--- optional?
template<typename T>
struct PrintMe<std::vector<T>> { ... };

无效。

您需要删除该行并使用:

template<typename T>
struct PrintMe<std::vector<T>> { ... };

关于c++ - vector 类型的模板类特化 - 不同的有效语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911904/

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