小编Ale*_*ler的帖子

如果重载函数仅被部分覆盖,则多态性不起作用

今天我觉得自己像个菜鸟:

class Base
{
public:
    virtual void foo(int)=0;
    virtual void foo(int, int) {}
    virtual void bar() {}
};

class Derived : public Base
{
public:
    virtual void foo(int) {}
};

void main()
{
    Derived d;
    d.bar(); // works
    d.foo(1); // works
    d.foo(1,2); // compiler error: no matching function call
}
Run Code Online (Sandbox Code Playgroud)

我希望d继承foo(int, int)Base,但事实并非如此.那我在这里错过了什么?

c++ polymorphism inheritance overloading

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

确定数字类型A是否可以转换为数字类型B.

给出两种数字类型FromTo.以下代码是否实际确定是否From可以将任何类型的值表示为类型的值To而不丢失信息?如果是,是否有更短或更易读的确定方式?

template <class From, class To>
struct can_cast
{
    static const bool value = 
        (std::numeric_limits<From>::is_integer || // either From is an integer type OR 
        std::is_floating_point<To>::value) && // ...they're both floating point types AND
        (std::numeric_limits<From>::is_signed == false || // either From is unsigned OR
        std::numeric_limits<To>::is_signed == true) && // ...they're both signed AND
        (std::numeric_limits<From>::digits < std::numeric_limits<To>::digits || // To has more bits for digits than From OR
        std::numeric_limits<From>::digits == std::numeric_limits<To>::digits && // To …
Run Code Online (Sandbox Code Playgroud)

c++ types casting c++11

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

将多个相同类型的boost :: error_infos添加到boost :: exception

#include <boost/exception/all.hpp>
#include <iostream>

struct myexception : virtual boost::exception, virtual std::exception {};
typedef boost::error_info<struct tag_info, std::string> info;

void main()
{
    try
    {
        BOOST_THROW_EXCEPTION(myexception()
            << info("1")
            << info("2") );
    }
    catch(const myexception& e)
    {
        std::cout << boost::diagnostic_information(e) << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将输出

[struct tag_info *] = 2

我了解为什么会这样,但希望将其输出

[struct tag_info *] = 1
[struct tag_info *] = 2

我当然可以用typedef infoas boost::error_info<struct tag_info, std::vector<std::string> >,然后std::vector在将所有信息累积到异常之前累加到其中,但这有两个缺点:
a)它涉及到std :: vector的复制
b)我需要在抛出前建立向量,即我不能简单地使用shift运算符添加更多信息。

因此,我现在正在寻找更好的解决方案,以将多个相同error_info类型的信息添加到异常中。


编辑:
我试图按照Josh Kelley在下面的评论和超载中的建议进行操作operator <<: …

c++ boost exception

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

c ++:'std :: is_fundamental'的替代品?

在模板类中的函数中,我试图区分原始类型和其他类型.

在c ++ 11中,您可以:

if(std::is_fundamental<T>::value)
{
    // Treat it as a primitive
}
else
{
    //Treat it otherwise
}
Run Code Online (Sandbox Code Playgroud)

如果我错了,请纠正我,这不仅仅是在c ++ 11中.

在早期版本的c ++中是否有替代方法?

c++ type-traits c++11

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

如何从 Python 执行批处理文件,以便它可以改变调用过程的环境?

在Windows中有一个3党的命令行工具,我想在我的python脚本使用。假设它foobar.exe位于C:\Program Files (x86)\foobar. Foobar 附带了一个额外的批处理文件init_env.bat,它将设置foobar.exe要运行的 shell 环境。

我想写一个 python 脚本,它会先调用init_env.bat一次,然后foobar.exe多次调用。但是,我知道的(所有机制使用os.system和反引号)似乎产生新的进程每次执行。因此,调用init_env.bat是无用的,因为它不会改变 python 脚本运行的进程的环境,因此每次后续调用都会foobar.exe失败,因为它的环境没有设置。

是否可以通过init_env.bat允许init_env.bat更改调用脚本进程环境的方式从 python调用?

python windows shell

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

外键是邪恶的?

很抱歉以假名发布,但由于公司限制我必须保持匿名,并且通常是为了保护无辜者.

我已经做了大约18年的专业开发人员,虽然我不是一名DBA,但多年来我一直与他们密切合作,并且已经形成了我认为对数据库实践有什么不好的感觉.我刚刚加入了一个公司,两个开发人员负责数据库模式,我发现他们非常反对使用外键约束.

他们最好的推理是:(1)由于涉及额外的数据设置,它使单元测试存储过程更加困难;(2)外键可能因顺序重要而引发错误.他们实际上更喜欢孤立的数据,而不是停止应用程序.

这对我来说似乎是不好的做法,但他们在他们的位置上坚定不移.我们提出了外键在数据完整性,查询性能,生成数据库图表等方面提供的优势,但无济于事.

我在这里看不到什么?有什么建议?

database-design foreign-keys database-schema sql-server-2012

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

HTTP 状态代码“不接受 EULA”?

我有一个 RESTful Web 服务,需要先接受最终用户许可协议 (EULA),然后才能使用。

如果 EULA(尚未)被接受,哪种 HTTP 状态代码最适合 Web 服务返回?

目前我看到以下可能性(我目前最喜欢的以粗体显示):

  • 403 禁忌
  • 412 前提条件失败
  • 417 期待落空
  • 423 锁定
  • 第428章 需要先决条件#
  • 第451章 因法律原因无法联系

rest http http-status-codes

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

如何在提示用户输入时提供可编辑的默认值?

在Perl脚本中,我想提示用户输入并为他提供可编辑的默认值.到目前为止我有这个:

#!/usr/bin/perl

print "what's your name? [John Doe]: ";
$name = <STDIN>;
chomp $name;
if (!$name)
{
    $name = "John Doe";
}
print "hello $name.\n";
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一个解决方案,我可以STDIN在用户开始输入之前使用"John Doe" .所以它实际上是一个可编辑的默认输入.例如,用户可以按退格键3x然后键入"Wayne"以获得"John Wayne"而不是从头开始键入整个字符串"John Wayne".我试图打印到STDIN,但那不起作用.

terminal perl prompt

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

获取boost :: variant对象的getter

我有一个getter对象,它返回一个Type类型的对象,定义如下:

typedef boost::variant<int, std::string> Empty;
Run Code Online (Sandbox Code Playgroud)

通常情况下,我既没有返回int也没有返回字符串,而是必须返回一个空状态.你觉得我怎么回这个州?

a)typedef一个Empty类型并将其添加到变体中:boost::variant<int, std::string, Empty>.

b)返回Type()

c)抛出异常

d)返回boost :: shared_ptr,在空的情况下指向NULL.

c++ boost

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

如何解决此MISRA警告:C++

以下代码如下:

  std::stringstream os;

  os << std::hex; // MISRA warning on this line
  os << std::setw(2);
  os << std::setfill('0');
Run Code Online (Sandbox Code Playgroud)

警告:"必需规则8-4-4,没有'&'或parenthisized参数列表使用的函数标识符"

我无法解决此问题,请提出解决方案.

c++ misra

4
推荐指数
2
解决办法
1028
查看次数