[英]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.