类或函数模板"static-if"更好?
"static-if" better with classes or function templates?
我想定义用于序列化变量的接口,其中根据模板参数,执行序列化代码(true
)或不执行任何(false
)。序列化函数本身在存档和变量类型上模板化。
是部分专用化序列化函数更好,还是内部使用静态方法专门化类更好?下面的代码正确吗?有没有更好的方法?
这是我的伪代码,我不确定它是否有效。
类方法如下所示:
template<bool ser>
struct MaybeSerialize;
template<> struct MaybeSerialize<true>{
template<class ArchiveT, class T>
static void serialize(ArchiveT& archive, T& var){ /* serialize*/ }
};
template<> struct MaybeSerialize<false>{
template<class ArchiveT, class T>
static void serialize(ArchiveT& archive, T& var){ /* do nothing*/ }
};
// call like this
MaybeSerialize<compileTimeBool>::serialize(archive,variable);
部分特化将是(语法可能是错误的):
template<bool ser, class Archive T, typename T> maybeSerialize(ArchiveT&,T&);
template<class ArchiveT, typename T> maybeSerialize<true>(ArchiveT&,T&){ /* serialize */ }
template<class ArchiveT, typename T> maybeSerialize<false>(ArchiveT&,T&){ /* do nothing */ }
// call like this
maybeSerialize<compileTimeBool>(archive,variable);
正如 Pubby 已经评论的那样,不可能在 C++ 中部分专化模板函数,你必须使用类专化。尽管如此,C++中的静态 if 实现非常简单:
/**
* Usual meta-IF
* Chooses between two template parameters dependent on a given static
* boolean value.
*
* @tparam b The static boolean value to check
* @tparam T The class chosen when b yields true
* @tparam E The class chosen when b yields false
*/
template <bool b, class T, class E>
struct IF;
/**
* Specialization for IF<true,T,E>. Chooses T for typedef RET.
*/
template <class T, class E>
struct IF<true,T,E> {
typedef T RET;
};
/**
* Specialization for IF<false,T,E>. Chooses E for typedef RET.
*/
template <class T, class E>
struct IF<false,T,E> {
typedef E RET;
};
(代码取自 C++ 中的静态接口,Brian McNamara和Yannis Smaragdakis)
相关文章:
- C++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 有什么更好的表现?IF或正常循环的不定循环
- if/else在哪个阶段比switch情况更好?做到了
- 类或函数模板"static-if"更好?
- 更好的 if 条件算法
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- 通过hash_map<字符串 fnPtr>调用函数指针是否比C++中的多个 if/else if/else 语句更有效或更好?
- 有什么比单个 if 语句负载更好的方法来解析大量案例?
- 比较if(…)和?:哪个更好