Тема: Незрозумілий синтаксис в С++17
Привіт. Небуло чим зайнятися сьогодні і вирішив подивитися що цікавого є в новому станарті С++17.
Зустрів такий код:
#include <type_traits>
#include <variant>
#include <algorithm>
#include <string>
#include <array>
#include <iostream>
#include <assert.h>
template<typename ... B>
struct Visitor : B...
{
template<typename ... T>
Visitor(T && ... t) : B(std::forward<T>(t))...
{
}
using B::operator()...;
};
template<typename ... T>
Visitor(T...) -> Visitor<std::decay_t<T>...>;
int main(){
std::array<std::variant<double,int>, 2> a{3.2, 2};
int intTotal = 0;
double doubleTotal = 0.0;
Visitor visitor{ [&intTotal](const int i){ intTotal += i;},
[&doubleTotal](const double d) { doubleTotal += d;}
};
std::for_each(begin(a), end(a),
[&visitor](const auto& v){std::visit(visitor, v);});
return intTotal;
}
1) Що значить наступний кусок коду:
struct Visitor : B...
який тиg буде мати B?
2) Що це таке?
using B::operator()...;
3) Що за цікавий конструктор.
template<typename ... T>
Visitor(T...) -> Visitor<std::decay_t<T>...>;