涉及自定义类的奇怪的模棱两可的重载
Strange ambiguous overload involving a custom class
我的编译器告诉我有一个不明确的重载。我无法理解它为什么会这样想。
我在example.h
有以下库(请一直向下滚动(:
#ifndef EXAMPLE_H
#define EXAMPLE_H
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <string>
template <class T> class Matrix
{
private:
std::vector<T> _data;
std::vector<size_t> _shape;
public:
Matrix (const Matrix<T> &) = default;
Matrix<T>& operator= (const Matrix<T> &) = default;
Matrix<T> ( ) {};
Matrix<T>( std::vector<size_t> shape )
{
size_t n = 1;
for ( size_t i=0 ; i<shape.size() ; i++ ) {
_shape.push_back(shape[i]);
n *= shape[i];
}
while ( _data.size()<n )
_data.push_back((T)0);
};
};
std::tuple<Matrix<double>,int> S2 (
Matrix<int> & in1, Matrix<int> &in2, std::vector<size_t> &shape
)
{
Matrix<double> out(shape);
return std::make_tuple(out,10);
};
std::tuple<Matrix<double>,Matrix<int>> S2 (
Matrix<int> & in1, Matrix<int> & in2, std::vector<size_t> & shape,
bool a=false, bool b=false
)
{
Matrix<double> out (shape);
Matrix<int> out2(shape);
return std::make_tuple(out,out2);
};
#endif
从以下文件调用:
#include "example.h"
int main ( void )
{
std::vector<size_t> shape;
shape.push_back(11);
shape.push_back(11);
int n;
Matrix<int> in1({100,100});
Matrix<int> in2({100,100});
Matrix<double> out;
std::tie(out,n) = S2 ( in1, in2 , shape );
return 0;
}
这是用clang++ -std=c++14 example.cpp
编译的
布尔参数的默认值使函数不明确,因为这两个函数都可以用参数(Matrix&, Matrix&, std::vector&(调用。
相关文章:
- 模棱两可的重载模板
- 调用重载的"<大括号括起来的初始值设定项列表>"对于对来说就足够了是模棱两可的
- VSCode 说 std::chrono 是模棱两可的,如果运算符<<重载
- 修复重载运算符的使用'+'模棱两可?
- 涉及自定义类的奇怪的模棱两可的重载
- 给定一个已经定义的模板函数,是否可以用另一个模板函数重载它而不会模棱两可
- 模棱两可:优先考虑重载 f(A&) 而不是 f(A)
- 看似模棱两可的模板函数重载
- 重载函数的调用 - 以继承的类作为参数 - 是模棱两可的
- C++ libconfig 模棱两可的重载
- ISO C++ 表示这些是模棱两可的运算符重载
- 为什么下面的运算符重载是模棱两可的
- 模棱两可的重载函数 - 如何以及为什么
- C++模板,模棱两可的重载
- 为什么这些重载不模棱两可?
- c++中模棱两可的函数重载
- 对重载函数的模棱两可的调用,即使一个更专业
- 重载函数会产生模棱两可的错误
- Gtkmm,重载的'Scale()'的调用是模棱两可的
- 调用重载<大括号括起来的初始值设定项列表>是模棱两可的,如何处理?