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

Задачи для тренировки и лучшего понимания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Теория плагинов http://www.cyberforum.ru/cpp/thread123914.html
Всем привет. Для одной моей проги, нужно реализовать поддержку плагинов. Плагины предполагаются простенькие, написанные на Си. То, что плагин, это просто .so файл - понятно. То, что прога может дергать из .so файла функции - тоже понятно. 1. Непонятно то, как сам плагин сможет дергать функции из программы? 2. Программа написана на С++, но плагины предполагаю писать на Си, во избежания...
C++ ./massdown: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./massdown) всем хай! собираю свою программу на новом железе х86_64 долго не получалось скомпилить. при линковке получал вот такое сообщение: relocation R_X86_64_32 against `a local symbol' я так понял, это из-за того что часть библиотек от которых зависит цель, были собраны как 32-ух битные. но с этим вроде все нормально, пересобрал все либы - скомпилировалось. теперь при запуске получаю такое... http://www.cyberforum.ru/cpp/thread98890.html
Как понять этот константный указатель? C++
В общем, имеется класс Cat. Объект класса - SimpleCat. И имеется функция с константым указателем: const SimpleCat* const FunctionTwo(const SimpleCat* const theCat) Что обозначают все эти const? Насколько я понимаю: 1. Константный указатель. 2. Может ссылаться только на FunctionTwo 3. Ничего не изменяет в объекте. 4. Ничего не делает с объектом theCat.
C++ Перехват и подмена вызываемых функций
Здравствуйте. Нужно подменить вызов таких функций как open(), lstat(), stat(), read(), write(), mkdir(), chdir(), getcwd() для определенного процесса. Интересует мнение других. Как бы вы реализовали эту задачу. Спасибо!

Показать сообщение отдельно
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
19.04.2011, 16:45     Задачи для тренировки и лучшего понимания
ForEveR
Нехилая задачка, долго пришлось думать и заодно хорошенько перечитать стандарт Компилятор при разрешении перегрузки имен должен следовать принципу Koenig lookup( кстати, Кёниг это не какой-нибудь член комитета, случаем? ), то есть если в вызове функции присутствуют параметры class/enum типов , то впридачу к обычному поиску имен в охватывающих пространствах он еще должен будет заглянуть в пространства имен, в которых содержатся типы этих самых параметров(кстати, порядок явно не оговаривается( хотя , может, я не увидел), по этому поводу никаких особых указаний нет?). А самое интересное, что как только компилятор находит в просматриваемом пространстве имен хотя бы одно объявление , в данном случае operator+, то в пространство имен на уровень выше он уже не полезет!

Таким образом, если чуток подправить пример и отправить объявление operator+ в то же пространство имен, в котором находится X, то std::accumulate должен будет заглянуть в пространство имен NS и найти там нужный operator+.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <numeric>
namespace NS
{
        struct X { };
    int operator +(int i, X) {return i+1;}
}
 
int main()
{
        NS::X c[10];
        std::accumulate(c, c+10, 0);
        return 0;
}
такой код должен скомпилироваться на любом компиляторе, а вот исходный вовсе не должен, так как в процессе обхода пространства имен ::std компилятор вполне вероятно может наткнуться на какое-то определение operator+, не важно, с какой сигнатурой, и просто-напросто дальше в глобальном пространстве искать не будет. Следовательно, код непереносимый, так как, вообще говоря, зависит от реализации stl, либо могут быть подключены заголовки в <numeric>, которые объявляют operator+, либо в самом <numeric> может быть объявление какого-то operator+( может, специализация там какая интересная для стандартных типов stl или еще что ). В студии как раз реализуется первый случай, подключается серия заголовков <utility>, <xutility> в которых есть определения operator+ для типов разности различных итераторов, поэтому в сообщениях об ошибке фигурируют всякие _String_Iterator, _difference_type и прочие.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru