小编Joh*_*ell的帖子

我该怎样理智地命名一个"伞"类型?

这"总是"困扰着我......

假设我有一个接口IFiddle和另一个接口,除了聚合几个不同的IFiddles 之外什么都不做:

public interface IFiddleFrobbler
{
    IFiddle Superior { get; }
    IFiddle Better { get; }
    IFiddle Ordinary { get; }
    IFiddle Worse { get; }
    IFiddle Crackpot { get; }
}
Run Code Online (Sandbox Code Playgroud)

(具体的IFiddleFrobblers和IFiddles取决于配置,由工厂创建.)

我一再偶然发现这种"伞"类型的命名 - 我想用描述性的东西来交换"Frobbler".

  • "集合","列表"和"集合"不够好,因为它不是可以枚举,添加或删除元素的集合/列表/集合.
  • "经理"已经出局,因为没有管理工作 - 工厂和配置处理.
  • "聚合器"听起来就像从GoF书中直接挑选出来的那样(虽然我认为它们不会破坏"demeter法则" - 这不是主题).

请赐教,我的"伞"类型的命名方案是什么?


编辑:正如xtofl在评论中指出的那样,实际上比我上面首次公开的语义更多.如果我改为做以下事情,我认为我的需要更清楚:

//
// Used for places where the font width might need
// to be tapered for a rendered  text to fit.
//
public …
Run Code Online (Sandbox Code Playgroud)

c# oop naming naming-conventions

6
推荐指数
3
解决办法
406
查看次数

非虚拟接口(NVI)习惯用法在C#和C++中一样有用吗?

在C++中,我经常需要NVI才能在API中获得一致性.不过,在C#中我没有看到它用得那么多.我想知道这是因为C#作为一种语言,提供的功能使得NVI不再需要吗?(尽管如此,我仍然在C#中使用NVI.)

c# c++ design-patterns idioms non-virtual-interface

6
推荐指数
2
解决办法
2435
查看次数

为什么boost :: shared_ptr中的引用计数器不是volatile?

boost::shared_ptr析构函数中,这样做:

if(--*pn == 0)
{
    boost::checked_delete(px);
    delete pn;
}
Run Code Online (Sandbox Code Playgroud)

其中pn是一个指向引用计数器的指针,该指针的类型定义为

shared_ptr::count_type -> detail::atomic_count -> long
Run Code Online (Sandbox Code Playgroud)

我本来期望的longvolatile long在给定螺纹使用和非原子0检查和-删除shared_ptr上述析构函数.为什么不变化?

编辑:

事实证明,我查看了未指定多线程使用时使用的标头(atomic_count.hpp).在atomic_count_win32.hpp中,为多线程用法正确实现了减量.

c++ multithreading boost shared-ptr

6
推荐指数
2
解决办法
1462
查看次数

Funq IoC Container是否支持属性注入?

我正在寻找一个在我的Compact Framework应用程序中使用的IoC容器.尝试Funq我注意到我找不到用它来进行Property Injection的方法.

我查看了项目网站的讨论和单元测试,但我找不到任何Property Injection的例子.

Funq是否支持Property Injection?

.net dependency-injection compact-framework inversion-of-control funq

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

何时检查此对象是否已被处理并抛出ObjectDisposedException是否合理?

在一个实现的类中IDisposable,什么时候检查对象是否已被处理并且ObjectDisposedException如果它已经被丢弃是合理的?在所有公共方法和属性中(除外Dispose)?有时?决不?

c# dispose idisposable objectdisposedexception

6
推荐指数
2
解决办法
1977
查看次数

使用lambda访问成员函数内的类模板参数类型失败

我有一个带有成员函数的类模板,该成员函数有一个想要使用类模板参数类型的lambda.它无法在lambda内部编译,但正如预期的那样在lambda之外成功.

struct wcout_reporter
{
    static void report(const std::wstring& output)
    {
        std::wcout << output << std::endl;
    }
};

template <typename reporter = wcout_reporter>
class agency
{
public:

    void report_all()
    {
        reporter::report(L"dummy"); // Compiles.

        std::for_each(reports_.begin(), reports_.end(), [this](const std::wstring& r)
        {
            reporter::report(r);    // Fails to compile.
        });
    }

private:

    std::vector<std::wstring> reports_;
};

int wmain(int /*argc*/, wchar_t* /*argv*/[])
{
    agency<>().report_all();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

error C2653: 'reporter' : is not a class or namespace name
Run Code Online (Sandbox Code Playgroud)

为什么我不能在成员函数lambda中访问类模板参数类型?

我需要做什么才能访问成员函数lambda中的类模板参数类型?

c++ lambda templates traits c++11

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

如何最好地将C#中的字节数组转换为C++ WinRT组件

我们有一个带有业务逻辑的WinRT组件,可以在内部按摩C++ unsigned char缓冲区.我们现在想从C#中提供缓冲区byte[].完美的边界会是什么样的,SomeWinRTFunction下面的函数的签名是什么?

void SomeWinRTFunction(something containing bytes from managed land)
{
    IVector<unsigned char> something using the bytes given from managed land;
}
Run Code Online (Sandbox Code Playgroud)

对于搜索引擎来说,这类问题看起来似乎太新了......

c# c++ windows-runtime

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

单元测试如何使参数验证变得多余?

我们有一个约定来验证构造函数和公共函数/方法的所有参数.对于引用类型的强制参数,我们主要检查非null,这是构造函数中的主要验证,我们在其中设置了类型的强制依赖.

头号我们之所以这样做是为了赶上早错误,并没有得到一个空引用异常几个小时上下行不知道哪里引入错误参数或当.随着我们开始转向越来越多的TDD,一些团队成员认为验证是多余的.

作为TDD声音倡导者的Bob叔叔强烈建议不要进行参数验证.他的主要论点似乎是"我有一套单元测试,确保一切正常".

但我可以在它的生命中看不到单元测试可以阻止我们的开发人员在生产代码中使用错误参数调用这些方法的方式.

请单位测试人员,如果你能用合理的例子向我解释这个问题,我会非常乐意抓住这个参数验证!

unit-testing

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

何时在std :: map上选择std :: vector作为键值数据?

考虑缓存和数据局部性的积极作用主存储器中搜索时,我倾向于使用std::vector<>std::pair<>样的键值项,进行线性搜索两种,如果我知道,键值项的总金额绝不会"太大"严重影响业绩.

最近我遇到过很多情况,事先我知道我拥有大量的键值项目,因此std::map<>从一开始就选择了.

我想知道在上述情况下你如何为适当的容器做出决定.

你呢

  • 总是使用std::vector<>(或类似)?
  • 总是使用std::map<>(或类似)?
  • 对于项目计数范围中的哪一个优于另一个,有一种直觉?
  • 完全不同的东西?

谢谢!

c++

5
推荐指数
2
解决办法
2601
查看次数

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