【发布时间】:2013-01-08 17:46:06
【问题描述】:
用什么宏可以用更短的东西替换“模板...”样板? 即:而不是这些:
template <typename NodeDataT, typename ArcDataT>
/*constructor*/ GraphDirected::
GraphDirected()
{
}
template <typename NodeDataT, typename ArcDataT>
/*destructor*/ GraphDirected::
~GraphDirected()
{
clear();
}
template <typename NodeDataT, typename ArcDataT>
void GraphDirected::
clear()
{
nodes.clear();
arcs.clear();
}
我想写这个:
boilerplate(/*constructor*/)
GraphDirected()
{
}
boilerplate(/*destructor*/)
~GraphDirected()
{
clear();
}
boilerplate(void)
clear()
{
nodes.clear();
arcs.clear();
}
当然最后我需要一些保护(?#undef ?),这样其他文件就不会被弄乱。
如果不是更复杂的话,这些丑陋的东西怎么处理?:
template <typename ElemType>
typename BST<ElemType>::nodeT * BST<ElemType>::
recFindNode(nodeT *t, ElemType & key) { ... }
【问题讨论】:
-
起初我担心有人想要只三个标记
template <typename的宏。 -
为什么不在类定义中定义这些方法?
-
@ipc:正是我的想法!
-
模板函数总是内联。
-
@ipc:不完全是,类型被替换然后编译,这和内联不一样,(顺便说一句:递归函数不能内联,因为你不知道编译时的递归深度时间)
标签: c++ templates macros c-preprocessor boilerplate