c++ - C++ 模板是否可以针对改进代码的条件执行此操作?

标签 c++ templates

我想这样做:
函数(条件A?pa1:pa2,条件B?pb1:pb2,条件C?pc1:pc2);

在C风格的函数中,没有问题。但是如果func()是一个模板函数,编译器就会报错。 这里 pa1 和 pa2, ... 是不同的类并且有一个static 方法 - “convert()”。出于性能考虑,convert() 也被声明为内联

如果模板不能解决这个问题,就会有一个很长的 if-else,如下所示。

if (conditionA)
{
    typeA1    a;
    if (conditionB)
    {
        typeB1    b;
        if (conditonC)
        {
            C1    c;
            Function(a, b, c);
        }
        else
        {
            C2    c;
            Function(a, b, c);
        }
    }
    else
    {
        typeB2    b;
        if (conditonC)
        {
            C1    c;
            Function(a, b, c);
        }
        else
        {
            C2    c;
            Function(a, b, c);
        }
    }
}
else
{
    typeA2    a;
    if (conditionB)
    {
        typeB1    b;
        if (conditonC)
        {
            C1    c;
            Function(a, b, c);
        }
        else
        {
            C2    c;
            Function(a, b, c);
        }
    }
    else
    {
        typeB2    b;
        if (conditonC)
        {
            C1    c;
            Function(a, b, c);
        }
        else
        {
            C2    c;
            Function(a, b, c);
        }
    }
}

最佳答案

条件运算符的结果(即p ? a : b中的ab)必须相同类型。也就是说,你不能这样做:

predicate() ? 3.14 : "sdfsd"

确保您的 pa1pa2 是兼容的类型(它们是相同的类型、继承自一种类型或转换为兼容的类型)。如果您确实有一个将这些类型转换为兼容类型的 convert 成员函数,那么为什么不直接使用:

conditionA ? pa1.convert() : pa2.convert()

最后,它不会太长。你已经写出了定义。保持通用并继续。

关于c++ - C++ 模板是否可以针对改进代码的条件执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/426941/

相关文章:

c++ - 如何通过包含相应的 .h 文件从 .cpp 中获取函数/类定义?

c++ - 具有多重继承的复制赋值运算符

jquery - jsRender 模板可嵌入 jquery 插件吗?

html - 如何实现类应用模板?

c++ - 从文件中读取下一行

c++ - 检查线是否穿过二维 map 上的墙

c++ - 替罪羊搜索功能

c++ - 如何清理(析构函数)动态指针数组?

c++ - 模板参数中的 const

c++ - 模板类型的重载决策和运算符 << 的问题 - 第 2 部分