启用和访问模板方法
Enabling and accessing template method
在以下代码中:
#include<iostream>
#include<cstdlib>
#include<type_traits>
using std::enable_if;
using std::is_same;
using std::cout;
using std::endl;
template<typename T>
struct S{
S(){t = static_cast<T>(NULL);}
template<typename U,typename enable_if<is_same<T,U>::value>::type>void operator()(U&& rrU){t = rrU;}
T t;
};
int main(){
S<int> s;
return(0);
}
在main()
中的模板结构实例化之后,如何在模板结构中定义并使用operator()
模板方法?
我必须承认我不太确定您要实现的目标,但是 type 将是 defuced 汇编,因此您不必担心。无论如何,我将按照以下方式实施您的示例(这是基于我对您的意图的理解(:
/** @file: test.cpp */
#include <utility>
#include <type_traits>
template <typename T>
struct S {
S() : t(0) { };
template <typename U>
void operator()(U &&rrU) {
static_assert(std::is_same<T,U>::value, "typename U must be equal to typename T");
t = rrU;
}
T t;
};
int main() {
S<int> s;
int a = 10;
s(std::move(a));
#ifdef RAISES_ERROR
double b = 10.0;
s(std::move(b));
#endif
return (0);
}
这可以通过两种方式进行编译:
g++ -std=c++11 test.cpp
编译罚款,第二种情况提出了汇编错误(这是您想要的吗?(,但是可以使错误自我解释:
g++ -std=c++11 -DRAISES_ERROR test.cpp
test.cpp: In instantiation of ‘void S<T>::operator()(U&&) [with U = double; T = int]’:
test.cpp:26:17: required from here
test.cpp:12:5: error: static assertion failed: Error
static_assert(std::is_same<T,U>::value, "typename U must be equal to typename T");
^
相关文章:
- 通过方法访问结构
- 将成员函数指针作为参数传递给模板方法
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- C++11:模板方法的模板函数调用无法编译?
- 如何从ECS中的模板方法获取组件?
- 使用 SFINAE 设计模板方法
- 一个模板方法,用于同时接受常量和非常量参数
- C++模板方法中的循环依赖关系
- 在 C++ 中使用模板方法重写类方法
- 类中的模板方法
- 基于枚举参数调用专用模板方法
- 启用和访问模板方法
- C++模板方法重载和具有多态性的类访问
- 模板类:访问派生的普通类方法
- "undefined reference"从静态方法访问的模板类的静态成员
- 为什么无法从模板方法访问此类自己的受保护成员?
- 虚拟模板函数访问器解决方法与模板派生类
- 私有基类通过子类中的模板友元函数和模板方法影响成员访问
- 如何让一个方法访问其他模板类实例的私有成员
- 根据构造函数的可访问性在函数之间进行选择的模板方法