小编Luc*_*lle的帖子

IDataErrorInfo如何工作?

我目前正在寻找我的WPF应用程序的验证,并看到提到IDataErrorInfo.但是,很少有如何使用它的指南,更糟糕的是没有人解释它是如何工作的.

在MSND.com网站,这是得到安宁 MSDN

public class Person : IDataErrorInfo
{
    private int age;
    public int Age
    {
        get { return age; }
        set { age = value; }
    }

    public string Error
    {
        get
        {
            return null;
        }
    }

    public string this[string name]
    {
        get
        {
            string result = null;
            if (name == "Age")
            {
                if (this.age < 0 || this.age > 150)
                {
                    result = "Age must not be less than 0 or greater than 150.";
                }
            } …
Run Code Online (Sandbox Code Playgroud)

wpf idataerrorinfo

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

使用MPL创建所有模板排列

我有以下模板化的类结构

struct TraitA{};
struct TraitB{};

template<typename trait>
struct FunctionalityA{};

template<typename trait>
struct FunctionalityB{};

template<typename Func>
struct FuncUserA{};

template<typename Func>
struct FuncUserB{};

template<typename fuser>
struct Host{};
Run Code Online (Sandbox Code Playgroud)

Host类现在可以具有以下类型.

typedef Host<FuncUserA<FunctionalityA<TraitA> > > Host1_t;
typedef Host<FuncUserA<FunctionalityA<TraitB> > > Host2_t;
typedef Host<FuncUserA<FunctionalityB<TraitA> > > Host3_t;
typedef Host<FuncUserA<FunctionalityB<TraitB> > > Host4_t;
typedef Host<FuncUserB<FunctionalityA<TraitA> > > Host5_t;
typedef Host<FuncUserB<FunctionalityA<TraitB> > > Host6_t;
typedef Host<FuncUserB<FunctionalityB<TraitA> > > Host7_t;
typedef Host<FuncUserB<FunctionalityB<TraitB> > > Host8_t;
Run Code Online (Sandbox Code Playgroud)

有没有办法用boost :: mpl创建一个类型列表?目前我甚至没有想法从哪里开始.我的目标是拥有这样的功能:

template<class T>
T* getHost()
{
  typedef boost::mpl::find<HostVector, T>::type MplIter;
  return new …
Run Code Online (Sandbox Code Playgroud)

c++ boost metaprogramming boost-mpl

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

有没有办法绑定模板<template>参数?

上下文

我有一个自定义比较器,需要另一个比较器并应用额外的检查:

template <template <typename> class Comparator, typename T>
struct SoftOrder : public std::binary_function<T, T, bool> {
    bool operator()(const T lhs, const T rhs) const {
        return Comparator<T>()(lhs, rhs) && AnotherCheck();
    }
};
Run Code Online (Sandbox Code Playgroud)

我有一个接受比较器的第二类,例如:

template <template <typename> class Comparator>
class Processor { ... };
Run Code Online (Sandbox Code Playgroud)

Processor使用标准比较器(例如std::less)可以很容易地实例化:

Processor<std::less> processor1;
Processor<std::greater> processor2;
Run Code Online (Sandbox Code Playgroud)

然而,实例化并不是那么容易,SoftOrder因为编译器正确地抱怨缺少第二个模板参数:

Processor<SoftOrder<std::less> > processor3; // <-- Fails to compile
Run Code Online (Sandbox Code Playgroud)

当前解决方案

在发布此问题之前,我已经提出了一些解决方案.

第一个解决方案 - 大量派生类

template <typename T>
struct SoftOrderLessThan : public SoftOrder<std::less, T> {};

template <typename …
Run Code Online (Sandbox Code Playgroud)

c++ templates boost boost-mpl

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

在网上缓存的策略?

在决定何时以及如何缓存时,您会考虑哪些问题,流程和问题.它总是一个没有胜利的局面吗?

这预示着您已经被优化的代码库所困扰.

caching

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

是否可以使用模板参数的所有组合生成类型?

我有一个模板课

template<class U, class V, class W> 
class S
{
//... implementations 
};
Run Code Online (Sandbox Code Playgroud)

和类型的一些股票类型实现U,VW:

typedef boost::mpl::vector<U0, U1> u_types;
typedef boost::mpl::vector<V0, V1, V2, V3, V4> u_types;
typedef boost::mpl::vector<W0, W1, W2, W3, W4> w_types;
Run Code Online (Sandbox Code Playgroud)

我想用模板参数的所有可能组合测试类S,

typedef boost::mpl::vector<
    S<U0,V0,W0>, 
    S<U0,V0,W1>,
    // ...
    S<U1,V4,W4>,
    > s_types;
Run Code Online (Sandbox Code Playgroud)

像这样:

boost::mpl::for_each<s_types>(test_func).
Run Code Online (Sandbox Code Playgroud)

唯一的问题是有2**5**5 = 50种组合,我不希望逐个输入.

有没有办法s_types用Boost :: mpl或Boost.Preprocessor 生成所有组合()?

谢谢.


添加了我最初的失败尝试:

我试图诉诸索引(因此定义u_types等)和部分模板专业化这样

namespace wrapper
{
  template <int Uidx, int Vidx, int Widx> 
  struct S_Wrapper
  {
    typedef S<Uidx, Vidx, Widx> type; …
Run Code Online (Sandbox Code Playgroud)

c++ templates boost boost-mpl

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

Boost.MPL和类型列表生成

背景

这适用于游戏引擎中的内存管理器.我有一个freelist实现,并希望有一个编译时列表,如果这些.(例如,MPL或Fusion矢量).这freelist对应于分配大小,当分配/解除分配大小小于常量的对象时,它们将转到相应的freelist.

最后,这意味着全局小对象分摊了常量时间分配和恒定时间释放.(好极了.)

问题

问题是生成我需要的类型,所以我最终可能会使用Fusion来实例化这些类型.使用的类型是(缩短等):

template <size_t N>
struct data_block
{
    size_t mSize; // = N
    char mData[N];
};

template <typename T, size_t ElementsPerPage,
    template <typename> class Allocator = std::allocator >
class freelist { /* ... */ };

template <typename T>
class callocator; // allocator that uses malloc/free
Run Code Online (Sandbox Code Playgroud)

freelist的将管理data_block的权力,以2的大小S,从最小去一个最大起动.所以我想要的是:

static const size_t MinimumSmallSize = 4; // anything smaller gets rounded up
static const size_t MaximumSmallSize = 512; // anything bigger …
Run Code Online (Sandbox Code Playgroud)

c++ boost metaprogramming boost-fusion boost-mpl

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

我在哪里可以找到有效的SVG XML Schema(用于生成ecore)?

我尝试将SVG XML Schema导入EMF,以获取ecore中的SVG元模型.但是,由于模式无效,导入失败:实际上,svg.xsd引用了XMLSchema.dtd,它本身引用了datatypes.dtd,它不存在!

因此,我尝试从其他位置从svg网站(svg.xsd,XMLSchema.dtd,xlink.xsd,xml.xsd)和缺少的datatypes.dtd 下载必要的文件.但是,在验证架构时我会遇到很多错误,例如

Error: XSD: An attribute reference may not have a type
Error: XSD: An <all> content model may not be nested within another content model
Run Code Online (Sandbox Code Playgroud)

等等.

有谁知道我在哪里可以找到有效的svg XML Schema,或者svg ecore元模型的实例是在有效的svg中序列化的?

xml svg xsd eclipse-emf eclipse-emf-ecore

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

Java和C#之间的桥梁

我被赋予了在C#和Java之间建立桥梁的任务.据说如果我们现在使用C#,然后我们从其他地方收到一个Java文件,我们应该能够将该Java文件转换为.NET,这样它就可以与我们的软件兼容.问题是我不知道该做什么或如何开始这项任务.有什么建议或意见吗?

有人说我最初必须制作平台独立的课程,如果这有帮助的话.

*编辑:对不起,如果我第一次不清楚,因为我自己并不完全了解这个任务,这就是我在这里的原因.但据我所知,我必须创建桥本身,我可以从我的.NET文件中调用源代码.我有几个月的时间来完成它,所以我认为我必须使每个Java库与C#兼容.

我四处寻找帮助,发现了一些类似的项目:JNBridge(付费使用),有形(免费演示)和Janett(开源),这就是我的观点.

**编辑:比如说我用Java创建一个Calculator类.我想在C#中创建该类的实例.

c# java language-interoperability platform-independent

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

qmake中的编译器范围值

qmake提供了几个内置的平台范围,允许项目文件根据当前平台执行不同的操作:

win32 {
    ...
}
unix {
    ...
}
Run Code Online (Sandbox Code Playgroud)

mkspecs目录中的所有平台规范也可用于测试各种平台/编译器组合,例如

linux-g++ {
    ...
}
win32-g++ {
    ...
}
win32-msvc2003 {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法找到一种只测试编译器的方法(没有os)

#This does not work
g++ {
    ...
}
msvc {
    ...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,而无需列出所有组合(linux-g++ | win32-g++ | cygwin-g++ | ... {})?如果这是不可能的,有充分的理由吗?

c++ qt scope qmake

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

当混合成员和非成员二元运算符时,clang 是否错误地报告了歧义?

考虑以下代码,其中混合了成员和非成员operator|

template <typename T>
struct S
{
    template <typename U>
    void operator|(U)
    {}
};

template <typename T>
void operator|(S<T>,int) {} 

int main()
{
    S<int>() | 42;
}
Run Code Online (Sandbox Code Playgroud)

在 Clang 中,此代码无法编译,说明对的调用operator|不明确,而 gcc 和 msvc 可以编译它。我希望选择非成员超载,因为它更专业。标准规定的行为是什么?这是 Clang 中的错误吗?

(请注意,将运算符模板移到结构之外可以解决歧义。)

c++ operator-overloading clang language-lawyer clang++

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