#include <vector>
struct A
{
void foo(){}
};
template< typename T >
void callIfToggled(bool v1, bool &v2, T & t)
{
if (v1 != v2)
{
v2 = v1;
t.foo();
}
}
int main()
{
std::vector<bool> v= { false, true, false };
const bool f = false;
A a;
callIfToggled(f, v[0], a);
callIfToggled(f, v[1], a);
callIfToggled(f, v[2], a);
}
ऊपर के उदाहरण के संकलन अगले त्रुटि पैदा करता है:क्यों वेक्टर <bool> :: संदर्भ बूल के संदर्भ में वापस नहीं आता है?
dk2.cpp: In function 'int main()':
dk2.cpp:29:28: error: no matching function for call to 'callIfToggled(const bool&, std::vector<bool>::reference, A&)'
dk2.cpp:29:28: note: candidate is:
dk2.cpp:13:6: note: template<class T> void callIfToggled(bool, bool&, T&)
मैं जी ++ का उपयोग कर (संस्करण 4.6.1) इस तरह संकलित:
g++ -O3 -std=c++0x -Wall -Wextra -pedantic dk2.cpp
सवाल कि ऐसा क्यों होता है? vector<bool>::reference
bool&
नहीं है? या यह एक कंपाइलर बग है?
या, क्या मैं कुछ बेवकूफ कोशिश कर रहा हूं? :)
दुर्भाग्यवश, इसके नाम के बावजूद, 'std :: vector' 'bool' का 'वेक्टर' नहीं है। –
एक कामकाज के रूप में, आप 'std :: unique_ptr (नया बूल [3]) 'का उपयोग कर सकते हैं ... –
हर्ब सटर [जब कंटेनर कंटेनर नहीं है?] (Http://www.gotw.ca/publications /mill09.htm) बस इस समस्या के बारे में है। – legends2k