繁体   English   中英

基于参数值的c ++模板成员函数专门化

[英]c++ template member function specialization based on parameter value

我尝试在相当大的旧c ++项目中简化c ++代码,下面的简单示例可以帮助我将模式应用于所处理的代码。 代码很大,我将其简化为核心问题。

我想编写c ++模板代码,该代码可以根据参数(例如enum)在编译时推断出模板类型。 在当前代码中,我必须手动编写模板类型

GetSignal<int*>(Signals::Clear) 

这可能容易出错。 我想实现SomeMagicNeedToBeHere以引起预期的行为。

enum Signals{ Clear, Filtered};


template <class DATA> class ContainerClass 
    : public SomeMagicNeedToBeHere<int*,Signals::Clear>,
      public SomeMagicNeedToBeHere<float*,Signals::Filtered>
{
   void DoSomething()
   {
        //auto == int*
        auto clear = GetSignal(Signals::Clear);

        //auto == float*
        auto filtered = GetSignal(Signals::Filtered);

   }
};

可以根据参数值推导类型,怎么做?

UPDATE(重写示例):

我检查了旧代码,但我的示例不正确,没有推断出的类型的基类。 为了更好的理解,我将结果更改为int和float。

类似以下内容可能会有所帮助:

// helper to get some type depending of signal
template <Signals sig> struct helper;

// specialization for each Signal to get type
template <>
struct helper<Clear>
{
    using type = int*;
};

template <>
struct helper<Filtered>
{
    using type = float*;
};

// And you may do similar stuff with function (and be generic if the type helper is enough)
template <Signals sig>
typename helper<sig>::type GetSignal()
{
    return nullptr;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM