c++ - 如何解决这个与 C++ 20 模块相关的问题?
问题描述
我在尝试使用C++(module)的新特性时遇到了一个问题,代码如下:
//Module.ixx
export module Module;
import <string>;
import <iterator>;
import <sstream>;
import <iomanip>;
import <cstdint>;
template<typename T>
class blake_mixin
{
public:
};
template<typename T, size_t N>
struct stream_width_fixer
{
stream_width_fixer(T value) : v(value) {}
T v;
};
template<typename T, size_t N>
std::ostream& operator<<(std::ostream& ostr, const stream_width_fixer<T, N>& value)
{
return ostr << std::setw(N) << value.v;
}
template<typename T>
struct null_mixin
{
//for example
void sample()
{
std::ostringstream someone;
}
};
class blake_provider
{
public:
static const bool is_xof = false;
blake_provider(size_t hashsize)
{
}
~blake_provider()
{
}
};
template<class HashProvider, template <class> class Mixin = null_mixin>
class hasher : public Mixin<HashProvider>
{
public:
template<typename H = HashProvider>
hasher(size_t hashsize) : provider(hashsize)
{
}
template<typename H = HashProvider>
inline std::string hexdigest() const
{
std::ostringstream res;
res << std::setfill('0') << std::hex;
return res.str();
}
private:
friend Mixin<HashProvider>;
HashProvider provider;
};
export typedef hasher<blake_provider, blake_mixin> blake;
//main.cpp
import Module;
int main()
{
blake(256).hexdigest();
}
代码混乱请见谅,代码没有实际意义,仅用于演示问题。因为我想问的更简洁一些,所以我简化了很多细节,但是问题很清楚。我只需要将这行代码添加到任何类中,它就会成功编译,
void sample()
{
std::ostringstream someone;
}
但我认为这种行为毫无意义,我很困惑,请告诉我哪里错了。非常感谢 不添加此代码时,会弹出错误消息
(68,28): error C2079: 'res' uses undefined class 'std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char>>'
我用的开发工具是VS2019,我也在VS2020上试过,也会遇到同样的问题。
解决方案
推荐阅读
- terraform - terraform 动态块创建 vmware 磁盘
- azure - Azure 事件网格 api 版本未定义
- asp.net - 单选按钮列表故障
- reactjs - FormBuilder react-formio 默认值
- django - Django ManyToManyField 持久性失败
- python - 如何将所有参数传递给 self 并删除 args?
- unity3d - ARCore 增强图像不在外部跟踪
- delphi - 为什么不继承本地类型声明?
- r - 如何使用 geom_smooth (ggplot2) 表示变化点趋势之前/之后
- python - PyTorch - 另一个张量中对应值的索引