Вопросы по теме 'sfinae'
SFINAE Для обнаружения существования функции, не являющейся членом
Кто-нибудь знает метод специализации шаблона в зависимости от того, определен ли метод, не являющийся членом? Я знаю, что существует множество способов специализации, если функция-член существует, но я никогда не видел примера, не являющегося членом....
1351 просмотров
schedule
11.07.2023
Ошибки при использовании decltype() и SFINAE
В ответ на ... какой-то другой вопрос где-то я написал этот код.
struct no_type{};
template<typename T> struct has_apply {
static decltype(T().apply<0u>(double())) func( T* ptr );
static no_type func( ... );
static const...
1455 просмотров
schedule
24.06.2022
Ошибка замены не является ошибкой (SFINAE) для перечисления
Есть ли способ использовать сбой замены не является ошибкой (SFINAE) для перечисления?
template <typename T>
struct Traits
{
}
template <>
struct Traits<A>
{
};
template <>
struct Traits<B>
{
enum
{
iOption =...
1302 просмотров
schedule
11.03.2023
Может ли SFINAE обнаруживать нарушения приватного доступа?
Интересно, если я проверю для какого-то члена класса, а член является частным, что ответит sfinae? Будет ли это ошибкой, или она скажет, что все в порядке, или она будет ошибкой в пути sfinae?
1012 просмотров
schedule
31.08.2023
Как работает этот шаблон класса has_member?
Я пытаюсь понять, как работает следующий шаблон класса (взято из здесь ), но я не мог понять это правильно:
template <typename Type>
class has_member
{
class yes { char m;};
class no { yes m[2];};
struct BaseMixin
{...
1692 просмотров
schedule
18.01.2024
SFINAE: компилятор не выбирает специализированный класс шаблона
У меня проблема SFINAE :
В следующем коде я хочу, чтобы компилятор C++ выбрал специализированный функтор и напечатал «специальный», но вместо этого напечатал «общий».
#include <iostream>
#include <vector>
template<class T,...
1099 просмотров
schedule
15.03.2022
Что случилось с моими членами класса условного шаблона SFINAE redux:?
Я новичок в написании кода метапрограммирования шаблона (а не просто в его чтении). Так что я столкнулся с некоторыми проблемами нубов. Один из них довольно хорошо резюмирован в сообщении, не относящемся к SO, под названием " Что случилось с моим...
2543 просмотров
schedule
02.11.2022
Указание разрешенных аргументов в шаблонах
Могу ли я точно указать, какие аргументы может принимать шаблон? Например, я хотел бы создать шаблон, который может быть создан только с классами, которые являются или расширяют класс A . В Java дженерики поддерживают это с помощью:
class...
1207 просмотров
schedule
17.01.2023
SFINAE - Обнаружить конструктор с одним аргументом
Кто-нибудь знает, как обнаружить конструктор с одним аргументом? Например, эта структура должна иметь отрицательный результат:
struct MyStruct
{
MyStruct( int x, int x2 ) : y( x ) {}
int y;
};
У меня есть хорошая проверка SFINAE, чтобы...
1511 просмотров
schedule
31.10.2022
Проверить наличие глобального оператора‹‹ в C++
Здравствуйте, я хочу написать две реализации функции-члена to_string следующим образом:
template <typename T0> class foo
{
public: std::string to_string();
public: T0 m_Value;
};
template <typename T0> std::string...
705 просмотров
schedule
11.02.2022
различное поведение активатора в разных контекстах в шаблонах классов
Почему поведение такое разное? Версия #if 1 успешно (что странно) компилируется и выдает ожидаемый результат в stdout , но версия с #if 0 этого не делает:
#include <iostream>
#include <type_traits>
#include <cstdlib>...
116 просмотров
schedule
26.04.2024
Перегрузка C++ 11 std::enable_if в Visual C++ 2013
Следующий фрагмент кода был взят из folly и проверяет, больше, чем другой во время компиляции.
#include <limits>
#include <type_traits>
template <typename RHS, RHS rhs, typename LHS>
bool greater_than_impl(
typename...
952 просмотров
schedule
21.02.2022
Тип совпадения унаследованных функций-членов
У меня есть следующий фрагмент кода, который не компилируется.
#include <iostream>
struct A {
void foo() {}
};
struct B : public A {
using A::foo;
};
template<typename U, U> struct helper{};
int main() {
helper<void...
754 просмотров
schedule
29.04.2022
Обнаружение наследования того же класса с помощью SFINAE
Я пытаюсь написать метафункцию, которая проверяет, все ли типы, переданные в качестве вариативного параметра шаблона, различны. Кажется, что наиболее эффективный способ сделать это — наследовать от набора классов и определить, есть ли ошибка....
606 просмотров
schedule
18.10.2022
Как условно скомпилировать элемент на основе шаблона класса
Я хотел бы условно скомпилировать член класса на основе его параметра шаблона класса. У меня есть удобные функции, которые имеют смысл для компилятора только в определенных условиях, поэтому я бы хотел, чтобы компилятор пропустил их, если я могу...
73 просмотров
schedule
12.09.2022
Является ли C ++ enable_if для ленивых легальным?
Я часто использую технику, которую я называю « enable_if ленивого», где я использую decltype и оператор запятой, чтобы включить функцию, основанную на некотором вводе шаблона. Вот небольшой пример:
template <typename F>
auto...
4098 просмотров
schedule
31.07.2023
Неожиданный сбой SFINAE с использованием std :: result_of
В C ++ 14 предполагается, что std :: result_of приведет к SFINAE, если выражение имеет неправильный формат *. Вместо этого я получаю ошибку компиляции («недопустимые операнды для двоичного выражения») в моем последнем случае ниже (т.е. позволяя...
296 просмотров
schedule
08.08.2023
Использует ли условный аргумент boost::enable_if_c‹› короткое замыкание?
Видите is >> i внизу моего кода? Я хочу, чтобы g++ (C++03; у меня есть причины) использовал первый шаблон operator>>() — тот, который печатает «неконтейнерный тип», потому что правое выражение — это int , а не, например, vector ....
144 просмотров
schedule
13.02.2023
анти-SFINAE, разрешающий перегрузку, если данное выражение *не* правильно сформировано
SFINAE легко использовать, чтобы скрыть перегрузку определенной функции, если конкретное выражение имеет неправильный формат. Но я хочу сделать обратное, скрыв перегрузку тогда и только тогда, когда заданное выражение является правильным, и сделать...
442 просмотров
schedule
12.04.2023
Специализация std::hash для производных классов работает в gcc, а не в clang
Я пытаюсь специализировать std::hash для производных классов. Пока лучший подход основан на этом ответе :
#include <type_traits>
#include <functional>
#include <unordered_set>
namespace foo
{
template<class T, class...
864 просмотров
schedule
26.10.2023