我想为任意类型T创建一个容器。但是,如果T有一个成员是头类型(我也定义了),我想添加一些功能。如果T没有该头部成员,则可以跳过添加的功能。根据模板参数内容执行或跳过代码
例如,添加的功能可能是基于执行操作的时间添加时间戳。下面是伪代码,我想要的东西:
struct my_header {
timestamp_t time;
// ... etc ...
}
template <class T>
class my_container {
public:
void some_operation(T val) {
// condition evaluated at compile time
if T has a member of type my_header {
val.header.time = get_current_time();
// ... etc ...
}
// other operations, agnostic to T
}
};
当然
,因为我有它,some_operation也有弄清楚my_header的类T的实例的名称,这个要求可以通过施加下面的一个被淘汰要用于所添加的功能要求(为了从最多到最少优选):
- 的
my_header
在T级实例必须具有名称header
- 的
my_header
实例是类的第一个成员变量T - T级导出从my_header代替包括它作为成员变量
用C++ 11细(预期实际上)。
你可以根据名字'header'是'my_header'来检查,但是不知道没有类告诉你的名字。 – chris
@Ken你想检查T的类型? –
这究竟会如何工作?不管你如何检查变量的存在(因为'val.header.time'),代码无法编译失败。我认为解决方案将涉及专业化。 – 2014-01-16 01:02:10