LINUX.ORG.RU

Сообщения v0r0n

 

Tux ручной работы

Галерея — Рабочие места

Награда за починеный компьютер)

>>> Просмотр (2592x1944, 1381 Kb)

 ,

v0r0n
()

Стиль или как правильно

Форум — Development

Здравствуйте. Какой способ получения контейнера из класса предпочтительнее для каждого из вариантов списка:

  • по значению;
  • без копирования, с возможностью редактирования полученного контейнера;
  • без копирования и без возможности редактирования.
#ifndef MYCLASS_H
#define MYCLASS_H

#include <vector>

class MyClass
{
public:
    MyClass();
    std::vector<int> getVec0();
    std::vector<int> &getVec1();
    const std::vector<int> &getVec2();
    void getVec3(std::vector<int>::iterator &itBeg, std::vector<int>::iterator &itEnd);
    void getVec4(std::vector<int>::const_iterator &itBeg, std::vector<int>::const_iterator &itEnd);
    void getVec5(std::vector<int> &vec);
    void getVec6(std::vector<int> *vec);

private:
    std::vector<int> myVec;
};

#endif // MYCLASS_H

И ещё вопросик, насколько допустимо объявление структур и функций не являющихся членами класса в *.h, но используемых в реализации функций-членов в *.cpp? Например, есть у меня обёртка для функций boost::spirit, заголовочные файлы и структуры, определяющие грамматики, объявлены только в parser.cpp и никак не фигурируют в parser.h.

/* parser.h */
//...
class MyParser
{
public:
    void getMyCon(string str, vector<int>::const_iterartor &itBegin, vector<int>::const_iterator &itEnd);
private:
    vector<int> myCon;
};
//...
/* parser.cpp */
#include "myparser.h"
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
//...

void foo(vector<int> &vec, int val)
{
    //...
}

template <typename Iterator>
struct MyGrammar
        : qi::grammar<Iterator, vector<int>(), qi::space_type>
{
    //...
};

void MyParser::getMyCon(string str, vector<int>::const_iterartor &itBegin, vector<int>::const_iterator &itEnd)
{
    //...
}

 ,

v0r0n
()

Значение по-умолчанию для ссылки на итератор

Форум — Development

Всем здрасте. Господа, подскажите, пожалуйста, как можно задать значение по-умолчанию для аргумента it.

//...
class MyClass
{
public:
    MyClass();
    int setBase(const string &str, string::iterator &it /* = ЧТО? */);
//...
};

 ,

v0r0n
()

C память

Форум — Development
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <stdio.h>
/* Печать элемента базы данных пользователей */
static void print_pwent (const struct passwd *pw) {
 printf ("Имя пользователя: %s\n", pw->pw_name);
 printf ("Идентификатор пользователя: %d\n", pw->pw_uid);
 printf ("Идентификатор группы: %d\n", pw->pw_gid);
 printf ("Начальный каталог: %s\n", pw->pw_dir);
 printf ("Начальная программа: %s\n", pw->pw_shell);
}
int main (void) {
 char *lgnm;           /* Имя текущего пользователя */
 struct passwd *pw;    /* Данные о текущем пользователе */
 /* Поиск и печать информации о текущем пользователе */
 if ((lgnm = getlogin ()) == NULL || (pw = getpwnam (lgnm)) == NULL) {
   fprintf (stderr, "\nНе удалось найти информацию о текущем пользователе\n");
   return 1;
 }
 printf ("\nИнформация о текущем пользователе\n");
 print_pwent (pw);
 /* То же для пользователя root */
 if ((pw = getpwuid ((uid_t) 0)) == NULL) {
   fprintf (stderr, "\nНе удалось найти информацию о пользователе root\n");
   return 1;
 }
 printf ("\nИнформация о пользователе root\n");
 print_pwent (pw);
 return 0;
}

При вызове getpwnam память под pw выделяется внутри функции, как я понимаю, но не ясно где она освобождается?

 ,

v0r0n
()

C++ &*

Форум — Development

Вот коментарий из stl_iterator.h

  // 24.4.1 Reverse iterators
  /**
   *  Bidirectional and random access iterators have corresponding reverse
   *  %iterator adaptors that iterate through the data structure in the
   *  opposite direction.  They have the same signatures as the corresponding
   *  iterators.  The fundamental relation between a reverse %iterator and its
   *  corresponding %iterator @c i is established by the identity:
   *  @code
   *      &*(reverse_iterator(i)) == &*(i - 1)
   *  @endcode
   *
   *  <em>This mapping is dictated by the fact that while there is always a
   *  pointer past the end of an array, there might not be a valid pointer
   *  before the beginning of an array.</em> [24.4.1]/1,2
   *
   *  Reverse iterators can be tricky and surprising at first.  Their
   *  semantics make sense, however, and the trickiness is a side effect of
   *  the requirement that the iterators must be safe.
  */

Объясните, пожалуйста, смысл данного выражения:

&*(reverse_iterator(i)) == &*(i - 1)

И что означает &* ?

 

v0r0n
()

Оператор преборазования типа С++

Форум — Development

Господа, подскажите, пожалуйста, какое назначение имеет квалификатор const перед типом к которому приводится значение?

operator const T() const
{
	T t = T();
	for (unsigned i = 0; i < sizeof(T); i++)
		t |= T(bytes[i]) << (i << 3);
	return t;
}

Код целиком

Перемещено beastie из general

 , const конвертер,

v0r0n
()

Указатель на функцию, возвращающую указатель

Форум — Development

Господа, что-то переклинило от бессонной ночи)

uint8_t  *(*GetDeviceDescriptor)( uint8_t speed , uint16_t *length);

Правильно я понимаю что приведённая выше строчка кода является указателем на функцию, возвращающаю указатель на целочисленную переменную?

 , функтор

v0r0n
()

STM32F4 Таймер

Форум — General

Здравствуйте, господа. Запускаю на STM32F4Discovery следующую программу:

#include "stm32f4xx.h"

int main()
{	
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_Init(GPIOD, &GPIO_InitStructure);

	GPIO_ResetBits(GPIOD, GPIO_Pin_15);
	
	/*
			HCLK: 168 MHz
			APB1 Prescaler: 4 => CK_PSC = 2 * 42 MHz = 84 MHz
	*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
	TIM_TimeBaseStructure.TIM_Prescaler = 84 - 1; // CK_CNT = 1 MHz
	TIM_TimeBaseStructure.TIM_Period = 1000 - 1; // CK_CNT / 1000 = 1 kHz
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	
	TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
	TIM_ARRPreloadConfig(TIM5, ENABLE);
	TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);
	TIM_Cmd(TIM5, ENABLE);
	NVIC_EnableIRQ(TIM5_IRQn);
	
	while (1) {	}
}

void TIM5_IRQHandler()
{
	if (TIM_GetITStatus(TIM5, TIM_IT_Update) == SET){
		TIM_ClearITPendingBit(TIM5, TIM_IT_Update);
		GPIO_ToggleBits(GPIOD, GPIO_Pin_15);
	}
}
Ожидаемого килогерца нет, есть чуть меньше 500 Гц :( Подскажите, пожалуйста, что я упускаю из виду.

 cortex-m4, , stm32f4, stm32f4discovery,

v0r0n
()

Именование .h и .cpp файлов при использовании Qt

Форум — Development

Господа, подскажите как по правилам хорошего тона именовать заголовочные файлы?

HeaderFile.h

headerFile.h

header_file.h

headerfile.h

v0r0n
()

передача функции как аргумента

Форум — Development

Господа, такая проблема...

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QString>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void foo (int (*bar)(int), int);
    int foo2(int);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    foo(foo2, 4);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::foo(int (*bar)(int), int i)
{
    (*bar)(i);
}

int MainWindow::foo2(int i)
{
    return i;
}
$ qmake
$ make
/usr/bin/uic mainwindow.ui -o ui_mainwindow.h
g++ -c -m64 -pipe -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt/mkspecs/linux-g++-64 -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I/usr/include/qwt -I. -I. -o main.o main.cpp
g++ -c -m64 -pipe -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt/mkspecs/linux-g++-64 -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I/usr/include/qwt -I. -I. -o mainwindow.o mainwindow.cpp
mainwindow.cpp: In constructor «MainWindow::MainWindow(QWidget*)»:
mainwindow.cpp:10:16: ошибка: нет подходящей функции для вызова «MainWindow::foo(<unresolved overloaded function type>, int)»
mainwindow.cpp:10:16: замечание: candidate is:
In file included from mainwindow.cpp:1:0:
mainwindow.h:22:10: замечание: void MainWindow::foo(int (*)(int), int)
mainwindow.h:22:10: замечание:   no known conversion for argument 1 from «<unresolved overloaded function type>» to «int (*)(int)»
make: *** [mainwindow.o] Ошибка 1
v0r0n
()

назначение клавиш в Emacs

Форум — General

господа, подскажите, пожалуйста, как в emacs на f5, к примеру, можно повесить следующие команды:

1. сохранение содержимого буфера(ов)

2. выполнение shell-command с аргументами

З.Ы.: имеется ввиду сразу оба действия на одну клавишу

v0r0n
()

разработка под ОС реального времени

Форум — General

Разработка под ОСРВ отличается от онной под ОС общего назначения?

Для ОСРВ процесс должен выполниться за определённый промежуток времени, иначе он считается «битым» и система предпринимает по отношению к нему особые инструкции? Если так, то ОСВР должна как-то определять какой интервал на исполнение этого процесса нужно выделить, но как это достигается?

v0r0n
()

RSS подписка на новые темы