gpt4 book ai didi

c++ - C++ 17 make函数返回类型模板,然后为支持的类型编写实现

转载 作者:行者123 更新时间:2023-12-02 10:03:50 26 4
gpt4 key购买 nike

我想转换以下示例代码

class Example{
public:
float getFloat(){return 0;}
int getInt(){return 0;};
std::vector<float> getFloatVector(){
return std::vector<float>();
}
};

插入语法稍好的代码-例如它看起来应该像这样:
class Example2 {
public:
template <class T> virtual T get();
};
Example2::get<float>(){
return 0;
}
Example2::get<int>(){
return 0;
}
Example2::get<std::vector<float>>(){
return std::vector<float>();
}

当然,第二个示例代码不会编译,但是它显示了我想如何使用Example类:
Example2 example;
LOGD("%d",example.get<float>());

最佳答案

成员函数模板不能声明为virtual,因此您可以将主模板的声明更改为

class Example2 {
public:
template <class T> T get();
};

然后像
template <>
float Example2::get<float>(){
return 0;
}
template <>
int Example2::get<int>(){
return 0;
}
template <>
std::vector<float> Example2::get<std::vector<float>>(){
return std::vector<float>();
}

从C++ 17开始,我们可以像这样使用 constexpr if
class Example2 {
public:
template <class T> T get();
};

template <typename T>
T Example2::get() {
if constexpr (std::is_same_v<T, float>)
return 0;
else if constexpr (std::is_same_v<T, int>)
return 0;
else if constexpr (std::is_same_v<T, std::vector<float>>)
return std::vector<float>();
else
return ...;
}

关于c++ - C++ 17 make函数返回类型模板,然后为支持的类型编写实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61224074/

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