是否可以将"this"类型用作模板参数(在宏内)?
Can I use the type of "this" as a template argument (inside a macro)?
我现在有这个:
#define THIS(T) (boost::static_pointer_cast<T>(shared_from_this()))
宏用于如下方法:
void Derived::run() {
do_something_with_a_shared_ptr(THIS(Derived));
}
这很好,但我想消除(Derived)
,并有:
void Derived::run() {
do_something_with_a_shared_ptr(THIS);
}
这可能吗?
或者,是否有更好的方法可以方便地访问shared_ptr
到this
,在(间接)从boost::enable_shared_from_this
派生的类中?这个问题似乎表明这个问题的答案是否定的。
类的层次结构如下:
class Base: public boost::enable_shared_from_this<Base> {
...
}
class Derived: public Base {
...
void run();
...
}
void do_something_with_a_shared_ptr(boost::shared_ptr<Derived>);
不完全回答您的问题,但您是否考虑过使用成员函数而不是宏?我通常这样做:
boost::shared_ptr< Derived > shared_this()
{
return boost::static_pointer_cast<Derived>(shared_from_this());
}
boost::shared_ptr< Derived const > shared_this() const
{
return boost::static_pointer_cast<Derived const>(shared_from_this());
}
相关文章:
- 了解'this'或其他参数是否为右值
- C++ Boost - 序列化错误 - 将"const B"作为"this"参数
- 成员函数的"this"参数具有"const"类型,但我的函数实际上不是"const"
- 整体模板参数。错误:在常量表达式中使用'this'
- 有没有办法绕过错误"因为'this'参数会丢弃限定符?
- 传递'const QVariant' 'this'参数会丢弃限定符 [-允许]
- C++错误:将"const umap_int {aka const std::unordered_map<int, int>}"作为"this"参数会丢弃限定符 [-permissive]
- 错误:将 x 作为 x 的参数传递'this'丢弃限定符
- C++ 不允许将'this'用作非类型模板参数
- const std::unordered_map<char, int>' 因为 'this' 参数会丢弃 lambda 中的限定符
- 为什么有必要将"this"指针作为"arg"参数传递给pthread_create
- 在模板类中使用"this"会导致参数初始化错误
- 错误:将“const sdf”作为“this”参数传递会丢弃限定符 [-fpermissive]
- 视觉C++:即使使用关键字,参数声明也会隐藏类成员"this"
- 错误:候选函数不可行:'this'参数具有类型 'const' 但方法未标记为 const
- 错误:将'xxx'作为'xxx'丢弃限定符的参数传递'this' [-允许]
- 用static_cast(*this)...初始化可变参数CRTP:<Base>合法吗?
- C++集合方法:函数'setCost'不可行:'this'参数的类型'const value_type'
- 如何理解C++隐式参数"this"
- C++:何时应该通过引用使用 PLUS 参数"this->"