Re[4]: Что бы я сделал на практике?
От: remark Россия http://www.1024cores.net/
Дата: 25.02.06 22:31
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, remark, Вы писали:



R>>Я бы не сказал, что тут плохой дизайн или плохая семантика. Новый интерфейс нет смысла придумывать — этот вполне адекватный.

R>>О каких трюках ты говоришь — пока нет никакого решения.

R>>


E>Я бы сказал, что проблема чисто умозрительная


E>Адекватное решение, как мне кажется, в этом случае -- итератор



А это что по-твоему? Итератор чистой воды!
Если тебе нужна запись в базисе {begin, end, ++}, то читай
конструктор DBCommand — begin()
Fetch() — operator++ с одновременным сравнением с end()



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: к слову
От: Angler Россия  
Дата: 27.02.06 09:22
Оценка: 9 (1)
Здравствуйте, remark, Вы писали:

R>Как на стадии компиляции форсировать проверку возвращаемого значения функции? Или это не возможно?

R>Как ни странно на форуме ничего похожего не нашёл...

Читая A Policy-Based Observer(I), наткнулся на забавное расширение gcc:
__attribute__((warn_unused_result));
http://www.rsdn.org/File/13021/angler.gif
Re[2]: к слову
От: remark Россия http://www.1024cores.net/
Дата: 27.02.06 09:31
Оценка:
Здравствуйте, Angler, Вы писали:

A>Здравствуйте, remark, Вы писали:


R>>Как на стадии компиляции форсировать проверку возвращаемого значения функции? Или это не возможно?

R>>Как ни странно на форуме ничего похожего не нашёл...

A>Читая A Policy-Based Observer(I), наткнулся на забавное расширение gcc:

A>
A>__attribute__((warn_unused_result));
A>



Прикольно. Я так понимаю, что это именно то, что мне надо. Если ещё с помощью pragma поднять уровень этого варнинга до error'а.
... жаль, что я работаю на msvc... Странно, что m$ не сделала чего-то подобного в __declspec


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[4]: Форсирование проверки возвращаемого значения
От: elcste  
Дата: 27.02.06 13:28
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

R>>>>some_func(); // не должно компилироваться

АТ>>>Не вижу причин почему последнее не должно компилироваться. Будет оно прекрасно компилироваться.

ПК>>Автор вопроса как раз хочет сделать так, чтобы оно не компилировалось.


АТ>Я понимаю. Мой ответ был задуман, как ответ на соообщение elcste, где он предлагает вариант с #define. Т.е. я имел в виду, что не вижу причин, почему последнее не должно компилироваться в контексте


АТ>#define some_func() int (some_func())

Если я правильно понимаю, в этом случае программа должна быть ill-formed в соответствии с 13.1/1-2.
Re[5]: Форсирование проверки возвращаемого значения
От: igna Россия  
Дата: 27.02.06 14:26
Оценка:
Здравствуйте, elcste, Вы писали:

E>Если я правильно понимаю, в этом случае программа должна быть ill-formed в соответствии с 13.1/1-2.



А вот что написано этажом выше:

13 Overloading [over]

1 When two or more different declarations are specified for a single name in the same scope, that name is said to be overloaded.



Что бы это значило? Вроде есть два варианта:

1. When two or more different declarations for a single name in the same scope are specified, that name is said to be overloaded.

2. When two or more different declarations in the same scope are specified for a single name, that name is said to be overloaded.
Re: Форсирование проверки возвращаемого значения
От: Sm0ke Россия ksi
Дата: 28.02.06 07:41
Оценка:
Здравствуйте, remark, Вы писали:

R>Как на стадии компиляции форсировать проверку возвращаемого значения функции? Или это не возможно?

R>Как ни странно на форуме ничего похожего не нашёл...

R>Например:


R>
R>bool some_func();

R>if (some_func()); // компилируется

R>bool result = some_func(); // компилируется

R>some_func(); // не должно компилироваться
R>


Почемубы не параметр по ссылке?

void some_func(bool & result);

или
class Result
{
private:
  bool value, isChecked;
public:
  Result(bool v) : value(v), isChecked(false) { }
  operator bool()
  {
    this->isChecked= true;
    return this->value;
  }
  ~Result()
  {
    if (!isChecked) { } // чего-то там...
  }
};

Result some_func();
Re[2]: Форсирование проверки возвращаемого значения
От: Sm0ke Россия ksi
Дата: 28.02.06 07:45
Оценка:
Класс можно ещё и шаблоном сделать...
template <class T> class Result
{
private:
  T value;
  bool isChecked;
public:
  Result(T v) : value(v), isChecked(false) { }
  operator T()
  {
    this->isChecked= true;
    return this->value;
  }
  ~Result()
  {
    if (!isChecked) { } // чего-то там...
  }
};

Result<bool> some_func();
Re[3]: Форсирование проверки возвращаемого значения
От: rg45 СССР  
Дата: 28.02.06 07:53
Оценка:
Здравствуйте, Sm0ke, Вы писали:

S>Класс можно ещё и шаблоном сделать...

S>
S>template <class T> class Result
S>{
S>private:
S>  T value;
S>  bool isChecked;
S>public:
S>  Result(T v) : value(v), isChecked(false) { }
S>  operator T()
S>  {
    this->>isChecked= true;
S>    return this->value;
S>  }
S>  ~Result()
S>  {
S>    if (!isChecked) { } // чего-то там...
S>  }
S>};

S>Result<bool> some_func();
S>



Я тоже первым делом хотел предложить что то подобное.
Но потом внимательно прочел корневой вопрос:

Исключения и проверку в ран-тайм не предлагать.

здесь
Автор: remark
Дата: 23.02.06
--
C++ уже затем учить надо, что он ум в порядок приводит. (с) Ломоносов М.В.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.