小编pm1*_*100的帖子

如何制作可插入的静态类

我知道如何在c#中制作可插拔的东西.定义一个接口,Activator.CreateInstance(<class>)等等.或者我可以有一个显式创建插件类实例的代码路径.很多种方法.

但是,如果我想要插件的服务是静态的(我知道我可以重构,所以它不是,但这不是问题的重点)

具体例子.我有一个提供磁盘I/O抽象的类(读取文件,列表目录,....).现在我想要这种抽象的不同实现,它可以提供来自真实FS,数据库的文件.

根据Olivier Jacot-Descombes的回复,我会有一个FileSystem类(这是真的)这样的

public static class FileSystem
{
    static IFSImplemenation s_imple;
    static FileSystem()
    {
        if(<some system setting>)
            // converted to singleton instead of static
            s_imple = new OldFileSystem() 
        else
            s_imple = new DbFileSystem();
    }

    public static byte[] ReadFile(string path)
    {
        return s_imple.ReadFile(path);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

重申 - 我有一大堆代码,我不想改变,所以保持调用签名相同很重要 - 这个解决方案实现了

.net c# plugins static-classes

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

shared_ptr分配优化

在某个地方,我看到一篇关于创建boost shared_ptr的优化方法的帖子,以便它同时分配ptr管道和指针.我做了SO搜索,但是在shared_ptr 上有很多帖子,我找不到它.有人聪明,请重新发布

编辑:谢谢你的回答.额外的信用问题.什么是正确的(首选的?)习惯用于返回null shared_ptr?即

FooPtr Func()
{
   if(some_bad_thing)
      return xxx; // null
}
Run Code Online (Sandbox Code Playgroud)

对我来说

return FooPtr((Foo*)0);
Run Code Online (Sandbox Code Playgroud)

看起来有点笨拙

c++ boost shared-ptr

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

如何创建一个泛型方法,可以将值变量初始化为0或将ref变量初始化为new(非null)

我有类似的东西

V Func<V>()
{
  // do stuff
  V res = default(V);
 // more stuff
  return res;
}
Run Code Online (Sandbox Code Playgroud)

问题是我希望res为0或V的新实例

我试过创建2个方法

Func<V> where T: new()
Func<V> where T: struct
Run Code Online (Sandbox Code Playgroud)

但令人惊讶的是,这是不允许的

我的解决方法是有2个功能

FuncNew<V> where T: new()
...
res = new V();
....
Run Code Online (Sandbox Code Playgroud)

FuncDefault<V> where T: struct
...
res = default(V)
...
Run Code Online (Sandbox Code Playgroud)

编辑:总结答案

new(T)将刷新ref或value类型; 我没有意识到这一点

c# generics

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

组织我的代码的惯用方法

我觉得待定的'关闭问题,太模糊,意见,......'但是这里有.

如何组织我的代码库?

我有一个非常简单的应用程序(unix守护程序),它与其他进程通信,读/写数据库,与Web服务器通信,具有内部状态.在c ++中,我会编写一堆类(可能在主子组件的子目录中).让我们说这是projd

然后在更高级别,我有与项目相关的实用cli函数.projcli1,projcli2 ....我假设与一个项目相关的所有代码都在一个GOPATH下

如果我正在研究几个不相关的项目.我是否仍然使用一个GOPATH,或者我是否每个项目都有一个GOPATH.

我试图找到示例代码库,但唯一的大型集合是包存储库,这是一堆库 - 这实际上并不是一回事.

如果这些问题太过模糊,那么这个问题.是否正确同一目录中的所有go文件必须是同一个包?

另一个简单具体问题.我找到了一个很好的对象池实现.它的包裹说"游泳池" - 很好.我在哪里放置它的单个文件.在一个名为'pool'的子目录中,我想有一个名为utils(或类似的东西)的目录似乎我不能这样做.我的意思是我不能拥有utils/pool和util/db(比如说)没有一个文件目录的树

go

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

GetPixel(ScreenWidth,ScreenHeight)抛出异常

我有一台1080P显示器.干

int j Screen.PrimaryScreen.Bounds.Width;
int k = Screen.PrimaryScreen.Bounds.Height;
_Bitmap.GetPixel(j, k).GetBrightness();
Run Code Online (Sandbox Code Playgroud)

(_Bitmap大小等于我的屏幕边界),它抛出一个异常,说"参数必须为正且<height".

c# visual-studio-2013

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

我怎么告诉cgo不要编译文件?

对于我说的常规go文件

// +build !windows
Run Code Online (Sandbox Code Playgroud)

但是cgo将此解释为c代码以进行编译

那我该怎么办?

go cgo

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

选择包含由连接表的不同行创建的列的语句

2桌

用户cols =姓名,电子邮件

joe|joe@gmail.com
sara|sara@hotmail.com
alan|alan@gmail.com
Run Code Online (Sandbox Code Playgroud)

表2是extras cols = name,col,value

joe|favoritecolor|blue
joe|boss|sam
sara|favoritecolor|green
Run Code Online (Sandbox Code Playgroud)

(实际上扩展了第一个表的模式,但没有让sql引擎注意到它)

让人们喜欢的颜色

Select  name
      , value As favoritecolor
From    user
      , extras
Where   extras.name = user.name
        And extras.col = 'favoritecolor'
Run Code Online (Sandbox Code Playgroud)

但是我如何获得最喜欢的颜色和老板?

请注意此查询所需的输出

select name,email,favoritecolor,boss from user
Run Code Online (Sandbox Code Playgroud)

joe|joe@gmail|blue|sam
sara|sara@hotmail.com|green|<null>
alan|alan@gmail.com|<null>|<null>
Run Code Online (Sandbox Code Playgroud)

sql

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

不引发错误的http客户端

我正在寻找不会收到HTTP错误(例如404)的c#HTTP客户端。这不仅仅是样式问题;它对于非2xx回复具有主体是完全有效的,但是如果在执行GetResponse()时HTTP堆栈抛出异常,我将无法理解它

c# dotnet-httpclient

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

如何在失败的realloc中释放malloc

我有这个结构:

typedef struct person_st{
   char *first_name, *last_name;
   int id;
   Date birthday;  
}*pPerson, Person;
Run Code Online (Sandbox Code Playgroud)

让我说我重新分配sizeof(Person)*(++n)几次.在每个结构中,我也为first_name和分配空间last_name.

假设在某些时候使用时会出现分配失败realloc,处理所有first_namelast_name分配的最安全/最智能的方法是什么?它还有一种方法可以在Person结构重新排除故障后释放它们吗?

谢谢.

c malloc struct

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

什么是 C++ 的 shared_from_this 的 Rust 等价物?

我有一个对象,我知道它在 an 内部,Arc因为所有实例总是Arced。我希望能够Arc在函数调用中传递我自己的克隆。我正在调用的东西稍后会在其他线程上给我回电。

在 C++ 中,有一个标准的 mixin 叫做enable_shared_from_this. 它使我能够做到这一点

class Bus : public std::enable_shared_from_this<Bus>
{
....
   void SetupDevice(Device device,...)
   {
       device->Attach(shared_from_this());
   }
}
Run Code Online (Sandbox Code Playgroud)

如果此对象不受shared_ptr管理(最接近的 C++ 必须Arc),那么这将在运行时失败。

我找不到等价物。

编辑:

这是一个为什么需要它的例子。我有一个定时器队列库。它允许客户端请求在将来的某个时间点运行任意闭包。代码在专用线程上运行。要使用它,您必须传递要稍后执行的函数的闭包。

use std::time::{Duration, Instant};
use timerqueue::*;
use parking_lot::Mutex;
use std::sync::{Arc,Weak};
use std::ops::{DerefMut};

// inline me keeper cos not on github
pub struct MeKeeper<T> {
    them: Mutex<Weak<T>>,
}

impl<T> MeKeeper<T> {
    pub fn new() -> Self {
        Self {
            them: Mutex::new(Weak::new()), …
Run Code Online (Sandbox Code Playgroud)

rust

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