- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
是否可以像下面那样在没有模板特化的情况下进行编译?
template <class T>
class A {
public:
#if std::is_same<T,int>
void has_int() {}
#elif std::is_same<T,char>
void has_char() {}
#endif
};
A<int> a; a.has_int();
A<char> b; b.has_char();
最佳答案
是的。制作功能模板,然后使用 std::enable_if
有条件地启用它们:
#include <type_traits>
template <class T>
class A {
public:
template<typename U = T>
typename std::enable_if<std::is_same<U,int>::value>::type
has_int() {}
template<typename U = T>
typename std::enable_if<std::is_same<U,char>::value>::type
has_char() {}
};
int main()
{
A<int> a;
a.has_int(); // OK
// a.has_char(); // error
}
解决方案来自 the other answer如果类很大并且有许多需要的功能而不考虑 T
,则可能不可行。但是您可以通过继承另一个仅用于这些特殊方法的类来解决这个问题。然后,您可以仅特化该基类。
在 C++14 中,有方便的类型别名,所以语法可以变成:
std::enable_if_t<std::is_same<U, int>::value>
和 C++17,甚至更短:
std::enable_if_t<std::is_same_v<U, int>>
关于c++ - 使用 std::is_same 进行元编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504280/
为什么这段代码会产生错误的输出? //this-type.cpp #include #include using namespace std; template class A { public
考虑以下代码: struct A { using type = int; using reference = int&; }; static_assert(std::is_same_v
is_same 对代码性能有影响吗?我在我的代码中多次使用它来检查我是否必须使用 std::less 或 std::greater 并且根据它们我必须检索特定值。我的测试是否足以证明 std::is_
if (std::is_same::value) { float a; somefunc_float(x,len,&a); } 上面的代码来自一个模板,
*编辑:不知何故我认为编译器正在创建 B正如A ,导致我假设 is_same 应该如何评估它们,而不管继承/派生。我的错 :( 对不起,随后的误解:\* 制作一些元函数来检查我的自定义类型,并遇到了这
我的 enable_if 语句变得很长,所以我想以某种方式进行 typedef。我不确定最好的方法是什么。 我试过了,还是不行 template struct isValidImageFormat {
我对以下问题感到困惑。我想写一些特征结构来测试某个类是否派生自另一个类。这可以通过 boost::is_base_of<> 来解决。但是,我要测试的基类有一个未定义的模板参数。 下面是一些代码示例:
我在将 std::is_same 效用函数与右值和左值引用结合使用时遇到了一个奇怪的行为。 考虑这个检查变量 t 类型的函数模板。 我正在使用 VS 2013: struct Test {}; tem
在一个项目中,我发现了一种保持 DRY 的可能性,因为除了一些小部分之外,对于模板的模板特化,很多代码可以保持不变。这是我目前正在做的一个小工作示例,用于检查我使用的是哪个模板类: template
我有一个函数模板,我想限制可以实例化它的类型集。 我是这样写的: template void DoSomething( /* ... Some parameters involving T ...
我知道constexpr函数不必在编译时求值,但如果可能的话。是下面的条件if是否在编译时评估? template inline std::string toString(const T& arg,
我正在使用第三方 API,其中包含一个包含一组 typedef 的头文件。在过去的 4 年里,一些 typedef 发生了微小的变化(例如,在 unsigned/signed 之间切换,从 int 变
这个问题在这里已经有了答案: Using commas inside a macro without parenthesis: How can I mix and match with a temp
相关问题:template-function-is-same-in-template-classes 我对指针“this”的类型感到有点不安(gcc 4.7.2,c++11)。原则上,例如C类型的非常
我的代码片段是: namespace serialization { struct output_stream { ///// void write(c
这个问题在这里已经有了答案: using std::is_same, why my function still can't work for 2 types (4 个答案) 关闭 2 年前。 考虑
在下面的代码中,为什么调用fun的两种方式呢? : fun(num)和 fun(num) , 编译时给出不同的结果? #include using namespace std; template::
是否可以像下面那样在没有模板特化的情况下进行编译? template class A { public: #if std::is_same void has_int() {} #elif
这个问题在这里已经有了答案: Accessing a class member in an if statement using std::is_same (2 个答案) using std::is
以下代码是 gcc 错误吗?检查 T 类型是否为尚未定义的 Circle 类,返回 false。 #include using namespace std; // uncomment to work
我是一名优秀的程序员,十分优秀!