gpt4 book ai didi

c++ - 默认模板参数可以对应于特化吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:04 24 4
gpt4 key购买 nike

您好 :) 我环顾了这个问题,似乎有很多相关的帖子,但到目前为止没有一个答案可以解决我的问题。如果您知道回答这个特定问题的帖子,请告诉我是哪一个,我会删除这篇帖子。

这就是我想要做的;我有一个带有一个模板参数的类,它的默认值对应于模板特化。到目前为止(见下面的代码),它没有编译。让我感到困扰的是,具有两个 模板参数和部分模板特化的类似情况编译并工作正常..:/

我做错了什么?


案例 1:两个模板参数(编译和工作)

标题

#include <iostream>

struct Special {};

template <class T, class U = Special>
class Bird
{
public:
inline void operator() () { sing(); }
inline void sing() const { std::cout << "Piu piu piu" << std::endl; }

private:
T t; U u;
};

template <class T>
class Bird<T,Special>
{
public:
inline void operator() () {}

private:
T t; Special u;
};

cpp

int main()
{
Bird<double,int> a;
Bird<double> b;

a(); b();
}

案例 2:一个模板参数(不编译)

标题

#include <iostream>

struct Special {};

template <class U = Special>
class Bird
{
public:
inline void operator() () { sing(); }
inline void sing() const { std::cout << "Piu piu piu" << std::endl; }

private:
U u;
};

template <>
class Bird<Special>
{
public:
inline void operator() () {}

private:
Special u;
};

cpp

int main()
{
Bird<int> a;
Bird b;

a(); b();
}

我得到一个错误:在“b”之前缺少模板参数。预先感谢您花时间阅读本文! :)

最佳答案

Bird 是一个 模板,因此您始终必须使用尖括号。与 function 模板不同,如果您想使用默认模板参数,您可以省略它们,但尖括号必须存在:

Bird<> b;

关于c++ - 默认模板参数可以对应于特化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16305665/

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