参数处的类型/值与Template不匹配

type/value mismatch at argument with Template

本文关键字:值与 Template 不匹配 类型 参数      更新时间:2023-10-16

我正在编写一些c++模板代码,以替换当前源中的if-else条件。在这里,我基于两个条件推导Helper数据类型,1。is建议2。简单或复杂

参见以下模板代码:

template<bool isAdvice, class SH, class CH>
class IfThenElse;
template<class SH, class CH>
class IfThenElse<true, SH, CH>
{
    public:
    typedef SH Helper;
};
template<class SH, class CH>
class IfThenElse<false, SH, CH>
{
    public:
    typedef CH Helper;
};
template <bool isAdvice, bool SimpleOrComplex>
class DeriveHelper
{
    public:
        typedef typename IfThenElse<isAdvice,
                 IfThenElse<SimpleOrComplex, SimpleHelper, ComplexHelper>::Helper,
                 IfThenElse<SimpleOrComplex, SimpleNoAdvHelper, ComplexNoAdvHelper>::Helper>::Helper DerivedHelper;

};

然而,在编译时出现此错误:

template.cpp:135: error: type/value mismatch at argument 2 in template parameter list for 'template<bool isTradeAdvice, class SH, class GH> struct IfThenElse'
template.cpp:135: error:   expected a type, got 'IfThenElse::Helper'
template.cpp:135: error: type/value mismatch at argument 3 in template parameter list for 'template<bool isTradeAdvice, class SH, class GH> struct IfThenElse'
template.cpp:135: error:   expected a type, got 'IfThenElse::Helper'

有人能告诉我原因吗?

您应该为两个模板类型参数IfThenElse预先设置一个typename关键字,就像为第一个所做的那样

template <bool isAdvice, bool SimpleOrComplex>
class DeriveHelper
{
public:
    typedef typename IfThenElse<isAdvice,
                 typename IfThenElse<SimpleOrComplex, SimpleHelper, ComplexHelper>::Helper,
                 ^^^^^^^^
                 typename IfThenElse<SimpleOrComplex, SimpleNoAdvHelper, ComplexNoAdvHelper>::Helper>::Helper DerivedHelper;
                 ^^^^^^^^
};