C++ Library containing a lot of needful things: Stack Trace, Command Line Parser, Resource Handling, Configuration Files, Unix Command Execution, Directories, Regular Expressions, Tokenizer, Function Trace, Standard Extensions.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.4 KiB
88 lines
3.4 KiB
/*! @file |
|
|
|
@id $Id$ |
|
*/ |
|
// 1 2 3 4 5 6 7 8 |
|
// 45678901234567890123456789012345678901234567890123456789012345678901234567890 |
|
|
|
#ifndef __SHARED_HXX__ |
|
#define __SHARED_HXX__ |
|
|
|
#include <mrw/checkcxx11.hxx> |
|
#include <memory> |
|
|
|
namespace mrw { |
|
|
|
//! Shared pointer with better usage than std::shared_ptr |
|
/*! You can assign a pointer or even construct like an auto variable. */ |
|
template <typename T> class Shared: public std::shared_ptr<T> { |
|
public: |
|
//! Default empty construction |
|
Shared() {} |
|
Shared(T* t): std::shared_ptr<T>(std::shared_ptr<T>(t)) {} |
|
//! Construction from std::shared_ptr |
|
Shared(std::shared_ptr<T> t): std::shared_ptr<T>(t) {} |
|
//! Constructor creates child with one argument |
|
template <typename T1> |
|
Shared(T1 t1): |
|
std::shared_ptr<T>(new T(t1)) { |
|
} |
|
//! Constructor creates child with two arguments |
|
template <typename T1, typename T2> |
|
Shared(T1 t1, T2 t2): |
|
std::shared_ptr<T>(new T(t1, t2)) { |
|
} |
|
//! Constructor creates child with three arguments |
|
template <typename T1, typename T2, typename T3> |
|
Shared(T1 t1, T2 t2, T3 t3): |
|
std::shared_ptr<T>(new T(t1, t2, t3)) { |
|
} |
|
//! Constructor creates child with four arguments |
|
template <typename T1, typename T2, typename T3, typename T4> |
|
Shared(T1 t1, T2 t2, T3 t3, T4 t4): |
|
std::shared_ptr<T>(new T(t1, t2, t3, t4)) { |
|
} |
|
//! Constructor creates child with five arguments |
|
template <typename T1, typename T2, typename T3, typename T4, typename T5> |
|
Shared(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5): |
|
std::shared_ptr<T>(new T(t1, t2, t3, t4, t5)) { |
|
} |
|
//! Constructor creates child with six arguments |
|
template <typename T1, typename T2, typename T3, typename T4, typename T5, |
|
typename T6> |
|
Shared(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6): |
|
std::shared_ptr<T>(new T(t1, t2, t3, t4, t5, t6)) { |
|
} |
|
//! Constructor creates child with seven arguments |
|
template <typename T1, typename T2, typename T3, typename T4, typename T5, |
|
typename T6, typename T7> |
|
Shared(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7): |
|
std::shared_ptr<T>(new T(t1, t2, t3, t4, t5, t6, t7)) { |
|
} |
|
//! Constructor creates child with eight arguments |
|
template <typename T1, typename T2, typename T3, typename T4, typename T5, |
|
typename T6, typename T7, typename T8> |
|
Shared(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8): |
|
std::shared_ptr<T>(new T(t1, t2, t3, t4, t5, t6, t7, t8)) { |
|
} |
|
//! Constructor creates child with nine arguments |
|
template <typename T1, typename T2, typename T3, typename T4, typename T5, |
|
typename T6, typename T7, typename T8, typename T9> |
|
Shared(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9): |
|
std::shared_ptr<T>(new T(t1, t2, t3, t4, t5, t6, t7, t8, t9)) { |
|
} |
|
//! Assign from shared pointer |
|
Shared& operator=(std::shared_ptr<T> t) { |
|
std::shared_ptr<T>::operator=(t); |
|
return *this; |
|
} |
|
//! Assign from pointer |
|
Shared& operator=(T* t) { |
|
std::shared_ptr<T>::operator=(std::shared_ptr<T>(t)); |
|
return *this; |
|
} |
|
}; |
|
|
|
} |
|
|
|
#endif
|
|
|