无法推断功能参数的非类型模板参数

时间:2019-06-03 02:27:48

标签: c++ templates language-lawyer c++17 template-deduction

这可能真的很简单,但是我无法弄清楚为什么这段代码无法编译

def limiteUsuario(self,*args):
    u = self.var.get()
    if len(u) == 1 and not 65<=ord(u)<=68: # you can also use *if not u in "ABCD"*
        self.var.set("")
    elif len(u) > 1:
        if not 65<=ord(u[-1])<=68: # retirar ultimo caracter caso nao seja digito
            self.var.set(u[:-1])
        else: # aproveitar apenas os primeiros 5 chars
            self.var.set(u[:self.max_user])

https://wandbox.org/permlink/PdBwAWVh6N9rkTE2

我该如何使用它?为什么不编译呢?


用例是 cd android $ ./gradlew bundleRelease 是对 $ ./gradlew assembleRelease resolve()return等不相关类型的重载。resolve(recursiveCat(node.nodes, category.label, treeData.length))实例表示function recursiveCat(nodes, parLabel, indexC){ console.log("cat call"); Category.find({ parent: parLabel }).then( categories => { categories.forEach((category) => { var self_node = recursiveCat(node.nodes, category.label, indexC); var node = { key: category.label, label: category.label, index: indexC, nodes: self_node } nodes.push(node); }); return nodes; }); }知道如何重新解释和使用的内存。

2 个答案:

答案 0 :(得分:3)

它不起作用,因为std::aligned_storage_t不是类,它是某些实现定义的类型的类型别名。实际上,您拥有的是:

template <std::size_t Size, std::size_t Align>
void foo(typename std::aligned_storage<Size, Align>::type);

SizeAlign不能从此推论,因为它是非推论上下文。您需要将std::aligned_storage_t的两个实例都替换为std::aligned_storage。然后,如果您需要对齐的类型,则可以使用::type进行访问。

答案 1 :(得分:0)

SizeAlign不能用std::aligned_storage<Size, Align>::type推论。

您可以使用sizeof / alignof检索(几乎)初始值:

template <typename T>
void foo(const T&)
{
    constexpr std::size_t size = sizeof(T);
    constexpr std::size_t alignment = alignof(T);

    std::cout << size << " "<< alignment << std::endl;
}

Demo(由于示例的对齐,获取的大小为104而不是输入100)