考虑到我有一个由枚举模板化的函数,所以我想要使用这个函数来简化它的使用。类似的问题:(Typedef with template functions,C++11: How to alias a function?)
以下是我想出的三种可能的解决方案,以及我不喜欢它们的地方:
除了个人不喜欢之外,上面列出的方法还有其他特殊的优点/缺点吗?是否应该不惜一切代价避免某些问题?
虚构的例子:
foo_lib.h
#ifndef _FOO_LIB_H_
#define _FOO_LIB_H_
enum class Score {
LOSS = 0,
DRAW = 1,
WIN = 3
};
void AddScore(int *current_score_p, const Score &score);
template <Score SCORE>
void AddScore(int *current_score_p) {
AddScore(current_score_p, SCORE);
}
// 1. macro
#define ADD_SCORE_DRAW(current_score_p) AddScore<Score::DRAW>((current_score_p))
// 2. static function pointer (auto would work too)
static void (*AddScoreDrawStatic)(int *current_score_p) = &AddScore<Score::DRAW>;
// 3. Explicit function for each case
void AddScoreDrawSpecial(int *current_score_p);
// 4. Like 3., but inline to keep in header
inline void AddScoreDrawInline(int *current_score_p) { AddScore<Score::DRAW>(current_score_p); }
#endif // _FOO_LIB_H_foo_lib.cpp
#include "foo_lib.h"
void AddScore(int *current_score_p, const Score &score) {
*current_score_p += static_cast<int>(score);
}
void AddScoreDrawSpecial(int *current_score_p) {
AddScore<Score::DRAW>(current_score_p);
}发布于 2017-06-28 08:30:55
如果您的目的是将分数添加到整数中并将结果存储在整数中,那么最简单的方法就是创建一个可以调用的函数,比如score = add_score(score, Score::DRAW);,它非常容易读。而且我讨厌宏。
int add_score(int previous_score, Score score);在我看来,使用非类型模板参数的模板不会提高可读性。
https://stackoverflow.com/questions/44797309
复制相似问题