小编kam*_*los的帖子

不为内部类推导出模板参数

我想做这样的事情:

#include <iostream>

template<typename T>
class myclass
{
    T something;
public:
    myclass(T something) : something{ something }
    { }

    struct result
    {
        T value;
    };

    result get_result()
    {
        return{ something };
    }
};

template<typename T>
std::ostream& operator<<(std::ostream& stream, const typename myclass<T>::result& res)
{
    return stream << res.value;
}

int main()
{
    myclass<int> m(0);
    std::cout << m.get_result() << "\n";
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当我输入结果时(取决于模板化的外部类),gcc和msvc都不会找到重载的流操作符.我甚至想做什么?

c++ templates c++11

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

使用 lld 和 s2wasm 查找堆的开头

我正在使用clang -> llc -> s2wasm和 来从 C 编译为 WebAssembly clang -> lld。因为没有提供 c 库,所以我编写了自己的分配器。但我不确定找到空闲内存的开始的最佳方法是什么。

lld 和 s2wasm 似乎都有内存布局:| globals | stack | free memory |。使用 s2wasm 的堆栈指针位于内存地址,使用 lld 则位于全局地址(无法从 C 访问?)。

我发现的一种方法是使用以下 hack 在 wasm 执行开始时读取堆栈指针:

int stacktop()
{
  int a;
  return (int)(&a+1);
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个局部变量,该变量不驻留在线性内存中并获取它的地址。为了生成地址,编译器将其放入内存堆栈中。

我使用返回值作为堆的开头。有没有更优雅且面向未来的方法来查找空闲内存?

memory-management heap-memory webassembly

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