我有一个功能:
template <typename T,
typename std::enable_if <std::is_same<T, int>::value == true>::type* = nullptr>
void test(T i)
{
//process data
}
有效。
但是,我不仅要为int
启用此功能,还要为float
和const char *
启用此功能...如何在不编写相同方法的情况下执行此操作3次?
答案 0 :(得分:11)
像这样:
template <typename T,
typename std::enable_if <std::is_same<T, int >::value ||
std::is_same<T, float >::value ||
std::is_same<T, const char *>::value>::type* = nullptr>
void test(T i)
{
//process data
}
答案 1 :(得分:3)
C ++ 17的通用解决方案(在godbolt.org上查看)
databaseRef.child("Likes").child(*key*).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange (DataSnapshot dataSnapshot) {
dataSnapshot.getChildrenCount(); <- like count
}
@Override
public void onCancelled (DatabaseError databaseError) {
}
});
答案 2 :(得分:1)
另一种通用解决方案是使用std :: disjunction(C ++ 17)来执行逻辑OR。允许类型在调用测试函数时指定为模板参数,或者您可以为特化定义typedef。
sdo_geom.sdo_area(geometry, 0.005, 'unit=SQ_MILE')