【发布时间】:2019-04-29 17:37:08
【问题描述】:
我想了解为什么void handleParam(const Str& name, Table<T> value) 模板重载永远不会被实例化(请注意,下面的代码是说明性的)。我确信它不起作用有一个很好的理由,我只是想了解这个原因。我知道(并使用)使用中间模板结构的解决方法。但是,如果可能有类似下面的内容,它会大大简化我的代码。
class TypeHandler
{
public:
TypeHandler(OtherClass& bi) : _bi(bi) { }
template <typename T> void handleParam(const Str& name, Table<T> value)
{
// Never gets instantiated.
}
template <typename T> void handleParam(const Str& name, T value)
{
}
}
template<typename HandlerType>
void HandleParamValue::handleTab(DataBlock& data, HandlerType& handler) {
...
// Table of floats.
Table<float> tab;
handler.handleParam<Table<float>>(param_name, tab);
// etc.
...
}
template<typename HandlerType>
void ParamStore::Iterate(HandlerType& handler) {
for (...) {
...
if (is_table(type)) {
HandleParamValue::handleTab<HandlerType>(_datablock, handler);
}
else {
HandleParamValue::handle<HandlerType>(_datablock, handler);
}
}
}
// Kick the whole thing off.
TypeHandler handler(_some_instance);
_param_store->Iterate(handler);
【问题讨论】:
标签: c++11 templates overload-resolution