【发布时间】:2018-05-05 14:24:21
【问题描述】:
我想使用可变参数模板来进行此类调用:
make_set<int, double, int>("...");
基本上这个想法是递归调用read_row()函数,只要至少有一个参数。
这里是被覆盖的函数:
template <typename __First>
void read_row(Row r){}
template <typename __First, typename... __Args>
void read_row(Row r)
{
int index = r.size() - sizeof...(__Args);
auto value = r.getValue<__First>(index);
read_row<__Args...>(r);
}
template <typename... __Args>
void make_set(const char* fileName="")
{
Parser parser(fileName);
for(int i = 0; i < parser.rowCount(); ++i)
{
auto row = parser.getRow(i);
read_row<__Args...>(row);
}
}
但是编译器坚持递归调用是不明确的。
/Users/kirill/Desktop/TSP-EQ/TSP-EQ/tspeq/tspset/tspset.hpp:42:13: Call to 'read_row' is ambiguous
【问题讨论】:
-
以双下划线开头的标识符保留用于实现。从技术上讲,这是未定义的行为。请发送minimal reproducible example,因为现在您的表现不足以重现该错误。另外,请从您的编译器复制/粘贴错误消息,而不是发布您的 IDE 的图片。
标签: c++ c++11 recursion variadic-templates overriding