«Концепты» на C++
Всем доброго времени суток.Придумано и написоно под влиянием некоторых публикаций Страуструпа на тему концептов в C++.
Захотелось мне однажды необычного — сделать так, чтобы нешаблонные функции/методы на C++ могли принимать в качестве аргумента любой объект, имеющий определенный набор методов, примерно так:
void fn(VectorWrapper x)
{
for (size_t i = 0; i < x.size(); ++i)
{
doSomething(x[i]);
}
}
::std::vector sv;
QList qv;
OtherSuperVector ov;
fn(sv);
fn(qv);
fn(ov);
Причем сделать это не используя наследование от базового класса.
Как это можно сделать, читайте под катом.
Читать дальше →