标签: using

python是否有类似C++的关键字?

在C++中,您通常可以通过仔细使用"using"关键字来大幅提高代码的可读性,例如:

void foo()
{
    std::vector< std::map <int, std::string> > crazyVector;
    std::cout << crazyVector[0].begin()->first;
}
Run Code Online (Sandbox Code Playgroud)

void foo()
{
    using namespace std; // limited in scope to foo
    vector< map <int, string> > crazyVector;
    cout << crazyVector[0].begin()->first;
}
Run Code Online (Sandbox Code Playgroud)

python是否存在类似的东西,或者我是否必须完全限定所有内容?

我将添加免责声明,我知道使用有其缺陷,应该适当限制范围.

python namespaces using

8
推荐指数
3
解决办法
9369
查看次数

带有一次性成员的C#ValueTuple

假设我有一个方法foo可以返回ValueTuple其中一个成员是一次性的,例如(IDisposable, int).

确保返回的一次性物体在呼叫方面正确配置的最佳方法是什么?

我尝试了以下方法:

using (var (disposable, number) = foo())
{
    // do some stuff using disposable and number
}
Run Code Online (Sandbox Code Playgroud)

但这不会编译:

'(IDisposable disposable,int number)':using语句中使用的类型必须可以隐式转换为'System.IDisposable'

我是否真的需要将我的代码包装在try-finally块中并将我的对象显式地放在finally块中,或者有更好的方法吗?

实际上我希望看​​到新的ValueTuples实现IDisposable接口并调用Dispose()他们所有的一次性成员.这可能是微软有价值的功能要求吗?

c# idisposable using valuetuple

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

"使用"声明可以与模板一起使用吗?

是否可以将"using"声明与模板基类一起使用?我已经读过它不在这里,但是由于技术原因还是它违反C++标准,它是否适用于gcc或其他编译器?如果不可能,为什么不呢?

示例代码(来自上面的链接):

struct A {
    template<class T> void f(T);
};

struct B : A {
    using A::f<int>;
};
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates using

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

使用sed插入TAB

我用这个命令:

sed -i "10 i \t\t\ttime.sleep(0.1) " /home/test_file
Run Code Online (Sandbox Code Playgroud)

在第10行插入一行如下: <TAB><TAB><TAB>sleep(0.1)

但是我得到了

t<TAB><TAB>sleep(0.1)...
Run Code Online (Sandbox Code Playgroud)

你能告诉我怎么得到这个结果吗?谢谢

PS.我在可执行的bash脚本中使用此命令.

tabs command using sed insert

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

用C++重命名一个类

我有一个类,我想在我的头文件中引用它,它位于一长串嵌套命名空间中:MySpaceA::MySpaceB::MySpaceC::MySpaceD::MyVeryLongNamedClass.我想以不同的名称使用它,但不是MyVeryLongNamedClass- 更短更有用的东西,比如MyClass.

我可以放入using MySpaceA::MySpaceB::MySpaceC::MySpaceD我的标题,但我不想导入整个命名空间.我宁愿有某种结构

using MyClass = MySpaceA::MySpaceB::MySpaceC::MySpaceD::MyVeryLongNamedClass

我知道这可以使用名称空间,但我似乎无法使用它来使用类.

非常感谢您的帮助.

c++ namespaces using rename reference

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

使用命名空间仅用于初始化列表

我在初始化列表中有很多命名空间用法,并且希望使用using命名空间来减少详细程度.但是,初始化列表超出了构造函数括号的范围,因此我必须将使用放在构造函数外部并使用它污染文件的其余部分.有没有办法根据需要调整使用范围?而不是:

MyClass::MyClass() :
    m_one(nsConstants::ONE),
    m_two(nsConstants::TWO),
    m_three(nsConstants::THREE)
{}
Run Code Online (Sandbox Code Playgroud)

我想要:

MyClass::MyClass() :
    using namespace nsConstants;
    m_one(ONE),
    m_two(TWO),
    m_three(THREE)
{}
Run Code Online (Sandbox Code Playgroud)

_

c++ namespaces using list

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

可以在C#中缩短数学参考吗?

在VB.NET中,我可以通过导入System.Math并直接引用其方法来使我的数学代码更加清晰:

Imports System.Math
[...]
Return New Vector3(Sin(az) * Cos(el), Cos(az) * Cos(el), Sin(el))
Run Code Online (Sandbox Code Playgroud)

但我不认为C#可以使用类来隐式访问它们的方法,所以我必须做类似的事情:

using System;
[...]
return new Vector3(Math.Sin(az) * Math.Cos(el), Math.Cos(az) * Math.Cos(el), Math.Sin(el));
Run Code Online (Sandbox Code Playgroud)

但那很难看; 它需要自己的滚动条!有没有办法用C#写一些看起来像我的VB.NET代码的东西?我可以为Sin和Cos编写局部包装器方法,但不会降低性能(因为函数调用的开销)?而且,这需要为我正在使用的每个类中使用的每个Math函数编写包装函数; 这也不是那么令人满意.

c# syntax import using

7
推荐指数
5
解决办法
730
查看次数

特定位置的C++模板别名(使用)

using在这种情况下,我需要通过(或任何其他方法)使用类型别名:

template <class T>
typename std::enable_if< /*HERE*/>::value
f (...) {};
Run Code Online (Sandbox Code Playgroud)

我写的HERE地方很长,结构内部定义了多种类型,而不是写,typename <very long templated struct dependent on T>::type我想写一个快捷方式.

我在更多情况下遇到过这种情况,比如模板特化和后缀返回类型语法.那么using在第一行template <...>和结构/类或函数之间的位置是否有任何使用方式(没有双关语)?

我尝试使用,(逗号)之类的东西,(using X = ... , /*actually using X*/)但没有成功.

有效的是全球范围内的 using

template <class Iterator>
using DT = typename DereferenceType<Iterator>::type&;
Run Code Online (Sandbox Code Playgroud)

但我不想要全局范围,我希望范围只适用于我使用它的模板.我不想写DT<Iterator>,只是DT.

不用说宏或任何预处理器指令都是不可能的.


真人生活的例子:

template <class Iterator, class GetCompValue, class SortOrder = Ascending>
typename std::enable_if<
    IsDereferenceable<Iterator>::value &&
    IsCallableLike<GetCompValue,
                   typename DereferenceType<Iterator>::type&(
                      typename DereferenceType<Iterator>::type&)>::value &&
    IsSortOrder<SortOrder>::value, void>::type
RadixSortLSDByteOffsetIter(Iterator …
Run Code Online (Sandbox Code Playgroud)

c++ scope using template-aliases

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

"使用typename"指令是否未由编译器实现?

我有一些看起来像这样的代码:

namespace myLibrary
{
    class A
    {
    public:
        struct Nested
        {
            ...
        };

        ...
    };
}
Run Code Online (Sandbox Code Playgroud)

在代码的其他部分,我需要访问A.因为我喜欢可读的代码,我也喜欢using指令:

using myLibrary::A;
...
A a;
Run Code Online (Sandbox Code Playgroud)

现在,在某些时候我还需要访问我的嵌套类,所以我想写这样的东西:

using myLibrary::A::Nested;
Run Code Online (Sandbox Code Playgroud)

显然,编译器不能知道这是一个嵌套类而不是类成员,并给我一个错误:

error : using declaration can not refer to class member
Run Code Online (Sandbox Code Playgroud)

我无法理解的是为什么这不能解决问题:

using typename myLibrary::A::Nested;
Run Code Online (Sandbox Code Playgroud)

编译器仍然给我完全相同的错误!

幸运的是,我有其他选择:

// Using a typedef
typedef myLibrary::A::Nested Nested;

// Using the new C++11 syntax for type aliasing
using Nested = myLibrary::A::Nested;
Run Code Online (Sandbox Code Playgroud)

但我想了解为什么使用typename指令不起作用.它不符合我的想法吗?或者它不是由编译器实现的?如果是后者,是否有理由呢?

c++ using nested-class typename

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

如何使用模板在C++中使用`using`(制作参数化别名)创建别名?

我正在阅读Bjarne Stroustrup的"The C++ Programming Language"第4版.在本书的第一部分中,我发现了using如下所示的用法:

// Error is in these 2 lines
template<typename T>
using Iterator<T> = typename T::iterator;
Run Code Online (Sandbox Code Playgroud)

*有关完整程序和错误消息,请参阅[**]*

这正是我在页面105中找到的.当我把它变成一个完整的程序并试图编译它时,g++给了我这个错误masseage:

> g++ -std=c++14 -o fnd find_all.cpp
find_all.cpp:13:15: error: expected '=' before '<' token
 using Iterator<T> = typename T::iterator;
           ^
find_all.cpp:13:15: error: expected type-specifier before '<' token
Run Code Online (Sandbox Code Playgroud)

我在这段代码中找不到任何问题,(我是C++的新手,我用我的小知识找不到问题)(更混乱的是我在Bjarne的书上发现了这个)

有人能告诉我为什么那段代码会出错?

注:不过如果我换成Iterator<C>typename C::iterator(见下文),它工作正常,没有错误!

[**]完整程序和错误消息:

// Error is in these 2 lines
template<typename T>
using Iterator<T> = typename T::iterator;
// -------------------------------------------

// For …
Run Code Online (Sandbox Code Playgroud)

c++ templates using c++11 c++14

7
推荐指数
2
解决办法
236
查看次数