我目前正在寻找我的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) 我有以下模板化的类结构
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) 我有一个自定义比较器,需要另一个比较器并应用额外的检查:
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) 在决定何时以及如何缓存时,您会考虑哪些问题,流程和问题.它总是一个没有胜利的局面吗?
这预示着您已经被优化的代码库所困扰.
我有一个模板课
template<class U, class V, class W>
class S
{
//... implementations
};
Run Code Online (Sandbox Code Playgroud)
和类型的一些股票类型实现U,V和W:
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) 这适用于游戏引擎中的内存管理器.我有一个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) 我尝试将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中序列化的?
我被赋予了在C#和Java之间建立桥梁的任务.据说如果我们现在使用C#,然后我们从其他地方收到一个Java文件,我们应该能够将该Java文件转换为.NET,这样它就可以与我们的软件兼容.问题是我不知道该做什么或如何开始这项任务.有什么建议或意见吗?
有人说我最初必须制作平台独立的课程,如果这有帮助的话.
*编辑:对不起,如果我第一次不清楚,因为我自己并不完全了解这个任务,这就是我在这里的原因.但据我所知,我必须创建桥本身,我可以从我的.NET文件中调用源代码.我有几个月的时间来完成它,所以我认为我必须使每个Java库与C#兼容.
我四处寻找帮助,发现了一些类似的项目:JNBridge(付费使用),有形(免费演示)和Janett(开源),这就是我的观点.
**编辑:比如说我用Java创建一个Calculator类.我想在C#中创建该类的实例.
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++ | ... {})?如果这是不可能的,有充分的理由吗?
考虑以下代码,其中混合了成员和非成员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 中的错误吗?
(请注意,将运算符模板移到结构之外可以解决歧义。)