Отключить & quot; Неиспользованную переменную & quot; для ScopedGuard

Играю с Андреем Александреску и Петру Марджиняном охраняемый объект

Когда вы компилируете его с -Wall -Werror, вы получаете ошибку «неиспользуемая переменная». Следующий код взят из LOKI

    class ScopeGuardImplBase
{
ScopeGuardImplBase& operator =(const ScopeGuardImplBase&);

protected:

~ScopeGuardImplBase()
{}

ScopeGuardImplBase(const ScopeGuardImplBase& other) throw()
: dismissed_(other.dismissed_)
{
other.Dismiss();
}

template <typename J>
static void SafeExecute(J& j) throw()
{
if (!j.dismissed_)
try
{
j.Execute();
}
catch(...)
{}
}

mutable bool dismissed_;

public:
ScopeGuardImplBase() throw() : dismissed_(false)
{}

void Dismiss() const throw()
{
dismissed_ = true;
}
};

////////////////////////////////////////////////////////////////
///
/// \typedef typedef const ScopeGuardImplBase& ScopeGuard
/// \ingroup ExceptionGroup
///
/// See Andrei's and Petru Marginean's CUJ article
/// http://www.cuj.com/documents/s=8000/cujcexp1812alexandr/alexandr.htm
///
/// Changes to the original code by Joshua Lehrer:
/// http://www.lehrerfamily.com/scopeguard.html
////////////////////////////////////////////////////////////////

typedef const ScopeGuardImplBase& ScopeGuard;

template <typename F>
class ScopeGuardImpl0 : public ScopeGuardImplBase
{
public:
static ScopeGuardImpl0<F> MakeGuard(F fun)
{
return ScopeGuardImpl0<F>(fun);
}

~ScopeGuardImpl0() throw()
{
SafeExecute(*this);
}

void Execute()
{
fun_();
}

protected:
ScopeGuardImpl0(F fun) : fun_(fun)
{}

F fun_;
};

template <typename F>
inline ScopeGuardImpl0<F> MakeGuard(F fun)
{
return ScopeGuardImpl0<F>::MakeGuard(fun);
}

проблема с использованием:

ScopeGuard scope_guard = MakeGuard(&foo);

который просто

const ScopeGuardImplBase& scope_guard = ScopeGuardImpl0<void(*)()>(&foo);

Я использую макрос, чтобы получить некоторые действия в конце копы:

#define SCOPE_GUARD ScopedGuard scope_guard = MakeGuard

таким образом, пользователь может просто позвонить

SCOPE_GUARD(&foo, param) ...

этот макрос затрудняет отключение неиспользованного предупреждения.

Может кто-нибудь помочь мне лучше понять это и, возможно, предложить решение без использования -Wno-unused-variable?

0

Решение

Вы можете попробовать старый метод:

 (void)scope_guard;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]