我有一个类为TCHAR*定义了一个用户定义的运算符,就像这样
CMyClass::operator const TCHAR*() const
{
// returns text as const TCHAR*
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做类似的事情
CMyClass myClass;
_tprintf(_T("%s"), myClass);
Run Code Online (Sandbox Code Playgroud)
甚至
_tprintf(_T("%s"), CMyClass(value));
Run Code Online (Sandbox Code Playgroud)
但是在尝试时,printf总是打印(null)而不是值.我也尝试了一个普通的char*运算符,以及const等变量.它只有在我明确调用运算符或执行转换时才能正常工作
_tprintf(_T("%s\n"), (const TCHAR*)myClass);
_tprintf(_T("%s\n"), myClass.operator const TCHAR *());
Run Code Online (Sandbox Code Playgroud)
但是,我不想演员.怎么能实现这一目标?
注意,一种可能性是创建一个具有const TCHAR*参数的函数,以便它强制调用运算符TCHAR*,但这也是我不想实现的.
我正在努力解决一个基本问题。该项目是用 C# 编写的,但问题很普遍。
我遵循始终有效的对象原则。作为一个示例,我有一个具有强制属性“ProductCategory”的产品实体。允许的产品类别是用户定义的,因此会保留(在数据库中)。
为了类型安全和更好的阅读,我为各种属性定义了值对象来封装这些类型的业务规则。所以就有了一个ProductCategory类。创建 ProductCategory 实例时,工厂方法会检查创建实例之前传递给工厂的字符串的最大长度等。这确保了 ProdcutCategory 的每个实例都是有效的。
简单的参数检查(例如长度)既简单又直接。我的问题是在哪里对可能保留的值实施验证检查。允许值的存储库隐藏了持久性技术,并具有 Exists 或 IsValid 方法。
选项 1)在调用工厂之前从应用程序层调用存储库。
这里,领域层并不像许多人主张的那样依赖于存储库/基础设施层。但工厂无法再确保对象有效。业务规则的实现依赖于应用层。此外,每个需要 ProductCategory 的命令都必须检查存储库,这违反了 DRY。
选项 2)从值对象工厂调用存储库
由于工厂是域层的一部分,因此该层必须能够访问存储库,这会引入额外的耦合。好处是ProductCategory的业务有效性由对象本身保证,无法规避。
是否有其他解决方案可以解决这一困境,或者是否有任何具体标准鼓励其中一种或另一种选择?如果工厂是针对保存在领域层中的存储库接口进行编程并且仅由基础设施层中的存储库实现的,这样可以吗?我试图理解不同的方法,但在这种情况下我感到迷失。
c# validation domain-driven-design ddd-repositories user-defined
我想处理特定的OSError代码,如下所示:
try:
os.scandir()
except OSPermissionError as error:
# Only catch errno.EACCES, errno.EPERM
handle_permission_error()
except OSFileNotFoundError as error:
# Only catch errno.ENOENT
handle_FileNotFoundError_error()
Run Code Online (Sandbox Code Playgroud)
这可以在python中完成吗?
我是Stack Exchange的新手,我一直在寻找一段时间,没有回答.在我的空闲时间我用Java创建一个matlab/like程序,我注意到我需要创建一种允许用户在程序中创建自己的变量的方法.一个例子是a = 5和b = 3,所以当a + b = 8.我的第一个想法是创建一个文件夹,其中文件可以保存为变量,然后在用户调用特定变量时进行搜索.任何形式的反馈将不胜感激.谢谢!
这是我的代码的一部分:
private void button1_Click(object sender, EventArgs e)
{
int Chocolate = int.Parse(QtyChocolate.Text);
TableUpdate("Chocolate", QtyChocolate.Text);
int Vanilla = int.Parse(QtyVanilla.Text);
TableUpate("Vanilla", QtyVanilla.Text);
int Strawberry = int.Parse(QtyStrawberry.Text);
TableUpate("Strawberry", QtyStrawberry.Text);
int Melon = int.Parse(QtyMelon.Text);
TableUpate("Melon", QtyMelon.Text);
int Mint = int.Parse(QtyMint.Text);
TableUpate("Mint", QtyMint.Text);
int Marijuana = int.Parse(QtyMarijuana.Text);
TableUpate("Marijuana", QtyMarijuana.Text);
Machinefunction1(a bunch of parameters here including some of the int ingredients);
Machinefunction55(a different bunch of parameters here including some of the int ingredients);
//...and hundreds more ingredients... These integer values parsed from corresponding
//textboxes will be …Run Code Online (Sandbox Code Playgroud) 我有一个简单的原始类型包装器:
template <typename T>
class Scalar {
public:
explicit Scalar(T value) : value{value} {}
Scalar(Scalar&& other) = default;
Scalar& operator=(Scalar&& other) = default;
Scalar(const Scalar& other) = default;
Scalar& operator=(const Scalar& other) = default;
template <typename U>
explicit operator Scalar<U>() {
return Scalar<U>{static_cast<U>(this->value)};
}
inline T getValue() const noexcept { return this->value; }
private:
T value;
};
Run Code Online (Sandbox Code Playgroud)
Casting Scalar值运行良好,但不知何故它无法用于引用,例如
auto a = Scalar<double>{2.54};
Scalar<int> b = static_cast<Scalar<int>>(a); // works
const auto& c = a;
Scalar<int> d = static_cast<Scalar<int>>(c); // fails …Run Code Online (Sandbox Code Playgroud)