1
我不明白爲什麼代碼的行爲是這樣嗎?函數超載錯誤
#include <iostream>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/container/vector/vector_fwd.hpp>
#include <boost/fusion/include/vector_fwd.hpp>
#include <boost/fusion/container/generation/make_vector.hpp>
#include <boost/fusion/include/make_vector.hpp>
#include <boost/fusion/sequence/io.hpp>
#include <boost/fusion/include/io.hpp>
template<typename Ar>
void func(Ar& ar, const boost::fusion::vector<>& v) {
std::cout << v << std::endl;
}
template<typename Ar, typename T0, typename T1>
void func(Ar& ar, const boost::fusion::vector<T0, T1>& v) {
std::cout << v << std::endl;
}
struct type {
template<typename T>
type& operator& (const T& v) {
func(*this, v);
return *this;
}
};
int main() {
type t;
t & boost::fusion::make_vector(33,44); // 1. <<<<<<<<<<<<<<<<<<<<<<<<
boost::fusion::vector<int, int> v(55,66); // 2.
t & v;
}
的問題是,爲什麼在第一種情況下FUNC(),用於空載體被稱爲?
文檔關於這一主題:
感謝的。
這是有道理的,如果您在第一個函數中更改爲'vector',它將顯示這些值。 –
2011-05-05 15:08:01
我已更改我的代碼:http://liveworkspace.org/code/885e6909e74256038708708746d098e7 現在第二個變體不起作用。有任何想法嗎? – niXman 2011-05-05 17:07:45
是因爲'variadic'類型不會轉換爲'vector1','vector2'等等。如果它需要轉換並且因此與vector0函數相匹配,它將自己簡單地轉換爲默認的'vector0'類型。但是,如果您指定這樣的功能:http://liveworkspace.org/code/3a0832f4f36d23626636fab12f0845dd。編譯器找到一個簡單的擬合,不會將其轉換爲任何指定的vectorN類。它將工作到爲該函數指定的模板參數的數量,即根據我已經表明它可用於矢量<>,矢量,矢量;不適用於矢量。 –
2011-05-06 09:40:56