#include <unordered_set>
class delegate;
class delegate_object_impl
{
public:
void setDelegate(delegate* delegate)
{
_d.insert(delegate);
}
void clearDelegate(delegate* delegate)
{
_d.erase(delegate);
}
virtual ~delegate_object_impl();
private:
std::unordered_set<delegate*> _d;
};
template <typename T>
struct delegate_object: T, delegate_object_impl
{
template<typename...Args>
delegate_object(Args... args):
T(args...)
{}
};
class delegate
{
public:
template<typename T, typename ... Args>
explicit delegate(delegate_object<T>* owner, void(T::*)(), Args ... args):
_owner(owner)
{
//...
owner->setDelegate(this);
}
delegate_object_impl* _owner;
~delegate()
{
if (_owner) {
_owner->clearDelegate(this);
}
}
void operator()()
{
}
void forget()
{
_owner = 0;
}
};
delegate_object_impl::~delegate_object_impl()
{
for (delegate* d : _d) {
d->forget();
}
}
std::vector<SomeValueType> pingAddr;
, то можно писать for(auto iter=pingAddr.begin();iter!=pingAddr.end();iter++)
{
SomeValueType& v = *iter;
avrPing += v.getResult().avrRTT; //автодополнение будет работать,
//а код все равно проще, чем если писать название типа вместо auto
i++;
}
#ifdef TIXML_USE_STL
/// QueryStringAttribute examines the attribute - see QueryIntAttribute().
int QueryStringAttribute( const char* name, std::string* _value ) const {
...
#ifdef TIXML_USE_STL
# TINYXML_USE_STL can be used to turn on STL support. NO, then STL
# will not be used. YES will include the STL files.
TINYXML_USE_STL := NO
std::locale::global(std::locale("Russian"));
std::wcout << L"привет";
CP_ACP
вместо CP_OEM
int main(int n, char**)
{
if (n%2)
{
return 1;
};
}
main:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov QWORD PTR [rbp-16], rsi
mov eax, DWORD PTR [rbp-4]
and eax, 1
test eax, eax
je .L2
mov eax, 1
jmp .L3
.L2:
mov eax, 0
.L3:
pop rbp
ret
const foo::Bar& myfunc();
В своем C-адаптере я переопределяю ее так:
const foo_Bar_t* myfunc();
Правильно ли я понимаю, что я не могу хранить этот указатель после возврата из функции?
const int g = 1;
struct S
{
const int & foo() const
{
return v;
}
const int & bar() const
{
return g;
}
int v = 0;
};
const int & foobar()
{
S s;
//return s.foo(); // oops
return s.bar(); //ok
}
int main(int argc, char const *argv[])
{
return foobar();
}
static_cast от std::auto_ptr<Baz>*
в Baz
? this->operator=(*static_cast<BazAutoPtr*>(&std::auto_ptr<element_type>(Baz_Constructor())));
error: taking address of temporary
static_cast
объекта к типу, объектом которого он на самом деле не является.inline BazAutoPtr():std::auto_ptr<Baz>(Baz_Constructor()){}