Форум программистов, компьютерный форум CyberForum.ru

Реализация has_plus - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перегрузка операций http://www.cyberforum.ru/cpp-beginners/thread1061710.html
Нужно выполнить две перегрузки: 1) удаление элемента если он пустой; 2) сравнение по названию(равные). Подскажите как это реализовать. Читаю..вроде не сложно..но не пойму как правильно это сделать... Unit2.h #ifndef Unit2H #define Unit2H
C++ Строки Доброго времени суток, уважаемые. Сколько не парюсь над куском кода, так и не пойму, почему я не могу применить string в этом случае? А может я просто делаю это не правильно? struct students { string surname; int year_birth; int year_acquisition; int phys, math, info; http://www.cyberforum.ru/cpp-beginners/thread1061692.html
C++ Построить матрицу расстояний между всеми точками. Найти равноудаленные точки, если такие есть, и напечатать их номера
Всем привет. Помогите написать программу... На плоскости заданы n точек своими координатами. Построить матрицу расстояний между всеми точками. Найти равноудаленные точки, если такие есть, и напечатать их номера. Заранее спасибо!!!
C++ Разработать функцию поэлементного умножения массива на константу
Ребята, помогите написать программу на языке C++ ! Нужно разработать функцию поэлементного умножения массива на константу. Ну и результат вывести на экран, но это я и сам могу сделать :)
C++ Работа с указателями http://www.cyberforum.ru/cpp-beginners/thread1061679.html
Дана динамическая целочисленная матрица. Построить динамический одномерный массив, каждый элемент которого равен сумме элементов одной строке исходной матрицы. Освободить память от матрицы, найти произведение элементов одномерного массива и записать его как динамическую переменную. Все исходные данные, результаты и соответствующие адреса распечатать. Из этого всего меня больше...
C++ Решение линейных сравнений по модулю a*x = b (mod m) помогите для курсовой написать программу для решения линейных сравнений по модулю (a*x = b (mod m)) и систем таких сравнений. http://en.wikipedia.org/wiki/Simultaneous_congruence#System_of_linear_congruences с чего начать? подробнее

Показать сообщение отдельно
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.01.2014, 15:37  [ТС]     Реализация has_plus
Исходники смотрел, но сложновато как то там с кучей разных макросов. И Qt Creator почему то не хочет по ним "прыгать". Полной реализации так и не нашел.
Вот файл has_plus.hpp, - но видимо я еще не дорос до полного его понимания:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//  (C) Copyright 2009-2011 Frederic Bron.
//
//  Use, modification and distribution are subject to the Boost Software License,
//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
//  [url]http://www.boost.org/LICENSE_1_0.txt[/url]).
//
//  See [url]http://www.boost.org/libs/type_traits[/url] for most recent version including documentation.
 
#ifndef BOOST_TT_HAS_PLUS_HPP_INCLUDED
#define BOOST_TT_HAS_PLUS_HPP_INCLUDED
 
#define BOOST_TT_TRAIT_NAME has_plus
#define BOOST_TT_TRAIT_OP +
#define BOOST_TT_FORBIDDEN_IF\
   ::boost::type_traits::ice_or<\
      /* Lhs==pointer and Rhs==pointer */\
      ::boost::type_traits::ice_and<\
         ::boost::is_pointer< Lhs_noref >::value,\
         ::boost::is_pointer< Rhs_noref >::value\
      >::value,\
      /* Lhs==void* and Rhs==fundamental */\
      ::boost::type_traits::ice_and<\
         ::boost::is_pointer< Lhs_noref >::value,\
         ::boost::is_void< Lhs_noptr >::value,\
         ::boost::is_fundamental< Rhs_nocv >::value\
      >::value,\
      /* Rhs==void* and Lhs==fundamental */\
      ::boost::type_traits::ice_and<\
         ::boost::is_pointer< Rhs_noref >::value,\
         ::boost::is_void< Rhs_noptr >::value,\
         ::boost::is_fundamental< Lhs_nocv >::value\
      >::value,\
      /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\
      ::boost::type_traits::ice_and<\
         ::boost::is_pointer< Lhs_noref >::value,\
         ::boost::is_fundamental< Rhs_nocv >::value,\
         ::boost::type_traits::ice_not< ::boost::is_integral< Rhs_noref >::value >::value\
      >::value,\
      /* Rhs==pointer and Lhs==fundamental and Lhs!=integral */\
      ::boost::type_traits::ice_and<\
         ::boost::is_pointer< Rhs_noref >::value,\
         ::boost::is_fundamental< Lhs_nocv >::value,\
         ::boost::type_traits::ice_not< ::boost::is_integral< Lhs_noref >::value >::value\
      >::value\
   >::value
 
 
#include <boost/type_traits/detail/has_binary_operator.hpp>
 
#undef BOOST_TT_TRAIT_NAME
#undef BOOST_TT_TRAIT_OP
#undef BOOST_TT_FORBIDDEN_IF
 
#endif


Добавлено через 1 минуту
Jupiter, а в каком файле есть комментарии?

Добавлено через 2 минуты
С задачей в принципе я уже так разобрался:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<typename T>
struct has_plus
{
private:
    static int detect(...);
 
    template<typename U>
    static decltype(std::declval<U>().operator+(std::declval<U>())) detect(const U&);
public:
    typedef typename std::conditional<std::is_same<T, decltype(detect(std::declval<T>()))>::value,
                                       T, void>::type type;
    static constexpr bool value = std::is_same<type, decltype(detect(std::declval<T>()))>::value;
};
 
Текущее время: 18:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru