小编Ian*_*ney的帖子

使用定义为实例变量的装饰器函数

(虽然这个问题是关于Flask的,但可以根据标题推广)

我正在尝试在类中使用Flask的app.route()装饰器.但是,Flask应用程序初始化为实例变量,即self.server设置为app.这意味着我不能使用装饰器,因为self在装饰方法之外是未定义的.我希望能够做到以下几点:

class MyClass:

    def __init__(self):
        self.server = Flask(__name__)

    @self.server.route('/')
    def home():
        return '<h1>Success</h1>'
Run Code Online (Sandbox Code Playgroud)

这个问题有没有解决方法?任何帮助是极大的赞赏!

python decorator flask python-decorators

6
推荐指数
1
解决办法
214
查看次数

从 Clang AST 中的 CXXConstructExpr 检索模板参数

假设我有一个像这样的变量声明:

std::vector<MyType> myVector(1);
Run Code Online (Sandbox Code Playgroud)

CXXConstructExpr这在 Clang AST 中表示为 a 。我有一个匹配器可以找到 this CXXConstructExpr,但我想MyType从中提取 decl for 。

我尝试了各种各样的方法,但似乎没有任何效果:

const CXXConstructExpr* construct = Result.Nodes.getNodeAs<CXXConstructExpr>("expr");
construct->getConstructor()->getTemplateSpecializationArgs()  // Always nullptr
construct->getConstructor()->getParent()  // Seems to lose the template parameters
construct->getConstructor()->getDescribedTemplate()  // Always nullptr
Run Code Online (Sandbox Code Playgroud)

c++ clang abstract-syntax-tree

5
推荐指数
1
解决办法
1756
查看次数

获取模板中最低的共享基类类型

假设我有一个函数,它接受两个不同的模板化参数:

template<typename T, typename U>
void fun(T t, U u);
Run Code Online (Sandbox Code Playgroud)

类型 T 和 U 是同一继承树的一部分。我想获得他们都继承自的最具体的类。

typedef /*something*/ shared_parent;
Run Code Online (Sandbox Code Playgroud)

例如,如果 typeT和 typeU是相同的类型,我想要那个类型。如果 typeT继承自 type U,我想要 type U。如果 TypeT和 typeU都继承自同一个父级,我需要该父级。

如果类型TU不是同一继承树的一部分,我不在乎会发生什么。

c++ inheritance templates template-meta-programming

5
推荐指数
0
解决办法
276
查看次数

dladdr() 输出参数的内存语义

的内存语义是什么dladdr()

#define _GNU_SOURCE
#include <dlfcn.h>

int dladdr(void *addr, Dl_info *info);

typedef struct {
    const char *dli_fname;  /* Pathname of shared object that contains address */
    void       *dli_fbase;  /* Base address at which shared object is loaded */
    const char *dli_sname;  /* Name of symbol whose definition overlaps addr */
    void       *dli_saddr;  /* Exact address of symbol named in dli_sname */
} Dl_info;
Run Code Online (Sandbox Code Playgroud)

通过阅读手册页,尚不清楚是否dli_fname

  • 指向常量字符串并且永远不需要释放
  • 指向一个堆数组,由用户负责删除它
  • 指向全局数组(可能不是,因为它声称是可重入的)

我想同样的问题也适用于dli_sname,但我怀疑 确实指向一个常量字符串(符号本身)。

用户是否负责删除dli_fname返回的内容dladdr()

c dynamic-linking dladdr

5
推荐指数
1
解决办法
232
查看次数

C++ 定义到基类的转换

我很难定义和使用转换运算符到基类。考虑以下:

class base 
{
public:
    base(const base&);
    base& operator=(const base&);
    //some stuff
};
class child : public base
{
public:
    operator base() const;
    //some more stuff
};

int main()
{
    child c;
    base b=c;
    b=c;
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试将子项转换为基数,operator base()则永远不会调用(即使我使转换显式)。相反,直接调用来自基类的复制构造函数或赋值运算符,无需转换。

operator base()当 achild被分配(或复制构造)到 a时,我怎样才能被调用base

c++ type-conversion

1
推荐指数
1
解决办法
2066
查看次数