Teď nechápu "jak vůbec nemá". V původním návrh samozřejmě šipka je
namespace std
{
template<typename T>
class synchronized_value
{
public:
synchronized_value(synchronized_value const&) = delete;
synchronized_value& operator=(synchronized_value const&) = delete;
template<typename ... Args>
synchronized_value(Args&& ... args);
~synchronized_value();
template<typename F>
auto apply(F&& func) -> typename std::result_of<F(T&)>::type;
unspecified operator->();
unspecified operator*();
};
}
Odpověď na první otázku bys našel v tom videu. Mají tam něco čemu říkají "update_guard", který zamkne objekt na dobu, kdy je guard aktivní. Já to tak nemám, protože podobnou funkcionalitu zařídí právě metody lock() a lock_shared()
auto guard = sync_object.lock();
guard->method1();
guard->method2();
Sám si nejsem jist, co je lepší řešení.
Jinak z hlediska návrhu kódu, trochu bych se ohradil proti myšlence, že chci nějakou činnost objektu realizovat sekvenčním voláním několika metod. Objekt navrhuju primárně tak, aby metoda = transakce. To jen na okraj.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 50 600×
Přečteno 23 672×
Přečteno 22 663×
Přečteno 20 631×
Přečteno 17 621×