gpt4 book ai didi

c++ - 通过基类特化类模板

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

我对以下这段代码提出了疑问

struct base {};
struct derived : public base {};

template <class T>
struct Type { };

template <> struct Type<base> {
typedef float mytype;
};

typename Type<base>::mytype a=4.2; // this works
typename Type<derived>::mytype a=4.2; // this doesnt

谁能解释为什么我不能用 derived 实例化类模板对象并提出一个简单的方法来做到这一点。对于我感兴趣的实际问题,我想使用许多派生类实例化模板类对象和/或使用 typedef。它们太多了,我不想单独专攻。

编辑:忘了说,不好意思,这需要是 C++03

最佳答案

#include <iostream>
#include <type_traits>

struct base { };
struct derived : base { };

template<typename T, bool = std::is_base_of<base, T>::value>
struct Type { };

template<typename T>
struct Type<T, true>
{
typedef float mytype;
};

int main()
{
Type<base>::mytype a1 = 4.2f;
Type<derived>::mytype a2 = 8.4f;
std::cout << a1 << '\n' << a2 << '\n';
}

在 C++03 中,std 可以简单地替换为 boost:boost::is_base_of

关于c++ - 通过基类特化类模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13580072/

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