gpt4 book ai didi

c++ - 类模板化成员函数和返回类型推断

转载 作者:行者123 更新时间:2023-11-28 06:08:37 25 4
gpt4 key购买 nike

我想使用 C++11 auto little specifier 来推断我的返回类型,但我尝试使用它的示例与其典型用法略有不同。

我有一个基类和派生某些成员函数的子类。

enum class state {composite1, composite2, composite3};
class material
{
public:

}
class sub_material1 : material
{
public:
template<typename T>
T* transform(state to_state)
{
T* material;
switch(to_state){
case(state::composite1) :
//do transform computations
// set material to return
material = some_transformed_material;
break;
case(state::composite2):
// do transform computation
// set material to return
material = some_transformed_material;
break;
.
.
.
.
}
return material;
}
}

所以如果我有类似的东西

sub_material1 mat1;
sub_material2 mat2;

mat2 = mat1.transform(state::composite2);

在这种情况下我如何使用 auto 和 decltype 鉴于我有条件测试可能会非常冗长....decltype 似乎有点矫枉过正?

如何推断类型?

谢谢

最佳答案

此代码无效。编译器无法根据返回类型推断模板参数,因此您应该手动设置:

auto mat2 = mat1.transform<sub_material2>(state::composite2);

如果之前声明了 mat2:

sub_material2 *mat2;
mat2 = mat1.transform<sub_material2>(state::composite2);

您正在尝试混合使用指针和非指针类型。

我建议您尝试以下方法:

struct composite1 {};
struct composite2 {};
struct composite3 {};

class material
{
public:

}

class sub_material1 : material
{
public:
sub_material1 transform(composite1)
{
//do transform computations
// set material to return
return some_transformed_material;
}

sub_material2 transform(composite2)
{
//do transform computations
// set material to return
return some_transformed_material;
}
.
.
.
.
}

然后你可以这样:

sub_material1 mat1;
auto mat2 = mat1.transform(composite2{});

sub_material1 mat1;
sub_material2 mat2;

mat2 = mat1.transform(composite2{});

如果你愿意,你可以返回指针,但是 mat2 应该是 sub_material2* 类型。

关于c++ - 类模板化成员函数和返回类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31825427/

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