Сообщение Re[2]: variadic от 25.09.2023 12:27
Изменено 25.09.2023 12:28 Sm0ke
Re[2]: variadic
Здравствуйте, Sm0ke, Вы писали:
Попробовал этот трюк провернуть с вариадиками, но что-то пошло не так: https://godbolt.org/z/9rdGfzn76
Попробовал этот трюк провернуть с вариадиками, но что-то пошло не так: https://godbolt.org/z/9rdGfzn76
#include <type_traits>
#include <iostream>
template <typename Type, typename ... U>
concept c_any_of = (std::is_same_v<Type, U> || ...);
template <typename ... T>
struct restricted
{
template <c_any_of<T ...> U>
friend void U::go(const restricted &) const;
private:
int value{55};
};
struct agent_A
{
template <typename T>
void go(const T & r) const
{
std::cout << "A: " << r.value << '\n'; // fail
}
};
struct agent_B
{
template <typename T>
void go(const T & r) const
{
std::cout << "B: " << r.value << '\n';
}
};
int main()
{
restricted<agent_A, agent_B> v;
agent_A a;
agent_B b;
a.go(v);
b.go(v);
return 0;
}
Re[2]: variadic
Здравствуйте, Sm0ke, Вы писали:
ради эксперимента
Попробовал этот трюк провернуть с вариадиками, но что-то пошло не так: https://godbolt.org/z/9rdGfzn76
ради эксперимента
Попробовал этот трюк провернуть с вариадиками, но что-то пошло не так: https://godbolt.org/z/9rdGfzn76
#include <type_traits>
#include <iostream>
template <typename Type, typename ... U>
concept c_any_of = (std::is_same_v<Type, U> || ...);
template <typename ... T>
struct restricted
{
template <c_any_of<T ...> U>
friend void U::go(const restricted &) const;
private:
int value{55};
};
struct agent_A
{
template <typename T>
void go(const T & r) const
{
std::cout << "A: " << r.value << '\n'; // fail
}
};
struct agent_B
{
template <typename T>
void go(const T & r) const
{
std::cout << "B: " << r.value << '\n';
}
};
int main()
{
restricted<agent_A, agent_B> v;
agent_A a;
agent_B b;
a.go(v);
b.go(v);
return 0;
}