问题:如何从静态类函数返回非常量ref,下面的代码为什么不这样做?
我试图用一个自定义分配器初始化向量,这个分配器本身是通过引用一个自定义内存管理类来初始化的。下面是它的样子:
自定义std::向量分配器已初始化,参考自定义内存管理类
template <class T, std::size_t N, std::size_t MAX_SIZE, int ID>
class short_alloc
{
arena<N, MAX_SIZE, ID>& a_; //this is the custom memory mgmt class
...
public:
short_alloc(arena<N, MAX_SIZE, ID>& a) noexcept : a_(a) {
std::cout<< "copying from reference" << std::endl;
}
但是,我希望每个模板类型只有一个内存管理器,因此我尝试使用singleton的GetInstance()
方法初始化分配器,以便每个模板类型只创建一个内存管理器:
单例类,以确保每组模板参数只有一个内存管理器
template <typename T>
class Singleton
{
public:
static T* m_instance;
static T& GetInstance(){
if(!m_instance){
m_instance = new T();
}
return m_instance;
};
};
用例:
我使用自定义分配器/内存管理器类实例化向量,如下所示:
template <class T, std::size_t N, std::size_t MAX_SIZE, int ID>
class SmallVector {
public:
std::vector<T, short_alloc<T, N, MAX_SIZE, 1>> vec;
SmallVector() : vec(Singleton<arena<N, MAX_SIZE, ID>>::GetInstance()){
std::cout << "running constructor" << std::endl;
}
...
}
并像这样在int main()
中调用:
SmallVector<int, MAX_BLOCK, MAX_INDIV, 1> s;
但是,这会产生一个编译器错误:
error: invalid initialization of non-const reference of type 'arena<3200ul, 400ul, 1>& from an rvalue of type 'arena<3200ul, 400ul, 1>*' return &m_instance;
因此,我的Singleton类似乎返回了一个常量引用/r-type引用。如何返回l型引用?
返回类型为Singleton
return m_instance;
那应该是
return *m_instance;
您可以使用以下方法简化课堂:
template <typename T>
class Singleton
{
public:
static T& GetInstance(){
// By using a static variable, its initialization is
// thread-safe, per C++11. That's another reason to
// prefer this method.
static T m_instance;
return m_instance;
}
};
我在阅读Kathy and Bert SCJP1.6时遇到了以下代码: 虽然是在跟踪变量的主题下,但我无法理解如何在main()方法(static)中引用非静态变量myBar?
我不知道什么时候在程序中使用一个静态/非静态变量。 我理解非静态/静态变量之间的区别,但我只是不知道何时使用每一个变量。那么在上面的代码中,为什么函数不能是静态的呢?(什么时候应该是静态的?)
我尝试使用网络豆IDE在java中创建一个简单的类。每当我试图执行这个命令时,它都会发出这样的警告。从静态上下文引用的非静态变量“。谁能告诉我为什么会发生这种情况以及如何解决它。提前感恩节。
问题内容: 我有一个模块分开的应用程序。有几个实体和CSV模块。CSV模块仅支持struct(Entity),但我想使CSV模块可与任何类型的实体一起使用。现在,它的工作方式如下:Csv模块从通道接收数据并将其严格转换为struct。我如何实现动态返回类型,因此它可以与任何类型的Entity一起使用,而不仅限于 问题答案: 快速/肮脏的解决方案: 返回接口{},但是您最终欺骗了编译器,而类型检查的
问题内容: 运行Demo类将在SomeClass中调用静态方法newInstance来调用构造函数并打印问候 定义方法将包括返回类型+方法名称以及参数 newInstance的返回类型是 SomeClass 在我看来很奇怪,因为我的班级叫做SomeClass 而不是 SomeClass 为什么在SomeClass 前面需要 ?看来,如果我不包含它,将会出现一个常见错误,称为“无法对非静态类型T进行
我找到了一些很好的SO链接(如何从异步回调函数返回值?以及从node.js中的回调函数返回值等),但它们并不是不能为我的问题提供解决方案。 我的问题:能够得到异步调用的结果,但我如何使用这个结果返回我的函数? 这里获取callBackResponse的值为true或false,并希望将该值用作: