variadic模板和功能覆盖
Variadic templates and functions overriding
我想使用variadic模板来进行此类呼叫:
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
这很模棱两可,因为
template <typename __First>
准确要求一个模板类型参数和
template <typename __First, typename... __Args>
要求一个或多个模板类型参数。
都可以与两个或多个参数(选择第二个参数)搭配使用,但是当函数仅使用一个参数调用时?
解决问题的可能方法是在第二个版本中施加两个或多个参数。像
template <typename F>
void read_row (Row r)
{
// auto value = r.getValue<F>(r.size()); ???
}
template <typename F, typename S, typename... As>
void read_row (Row r)
{
int index = r.size() - (1U + sizeof...(As));
auto value = r.getValue<F>(index);
read_row<S, As...>(r);
}
相关文章:
- C++中"覆盖功能的异常规范比基本版本更宽松"的奇怪错误
- 矢量被push_back功能覆盖
- 为什么我无法覆盖虚拟功能?
- 是否可以在 C++03 中实现类似"覆盖"的功能
- 覆盖私有功能,它与受保护功能有何不同?
- 带有抽象类的覆盖模板功能
- 覆盖私人功能
- C++继承 - 覆盖功能,包括使用 "::" s、.h 文件和.cpp文件
- C++向下转换以撤消功能覆盖
- 每个实例C 的覆盖功能
- SVML的覆盖功能调用
- 如何在标题文件中获取成员功能的正确代码覆盖范围
- C 从同一基本模板类覆盖功能,具有多个继承模棱两可的函数调用
- 是否有可能覆盖全局实现的功能
- variadic模板和功能覆盖
- 需要有关多个继承和可选功能覆盖C 的建议
- 我想我将名称隐藏与功能覆盖混淆了
- 虚拟功能覆盖和隐藏
- 纯虚拟功能覆盖
- 将私有功能覆盖给公共功能的潜在危险是什么?